gpt4 book ai didi

java - QuickHull 算法的复杂性?

转载 作者:可可西里 更新时间:2023-11-01 18:37:07 24 4
gpt4 key购买 nike

我知道复杂度是 O(nlog(n))。但为什么?你是怎么得出这个答案的?

任何帮助将不胜感激,我很想知道!

最佳答案

它的平均情况复杂度被认为是 O(n log(n)),而在最坏的情况下它需要 O(n^2)(二次) .

考虑以下伪代码:

QuickHull (S, l, r)

if S={ } then return ()
else if S={l, r} then return (l, r) // a single convex hull edge
else
z = index of a point that is furthest (max distance) from xy.
Let A be the set containing points strictly right of (x, z)
Let B be the set containing points strictly right of (z, y)
return {QuickHull (A, x, z) U (z) U QuickHull (B, z, y)}

分区由通过两个不同极值点的线确定:最右边的最低点 r 和最左边的最高点 l。找到极值需要 O(n) 时间。

对于递归函数,需要n步来确定极值点z,但递归调用的成本取决于集合A 并设置 B

最佳情况。考虑最佳情况,即每个分区几乎平衡。那么我们有

T(n) = 2 T(n/2) + O(n)

这是一个熟悉的递归关系,其解是

T(n) = O(n log(n))

这会发生在随机分布的点上。

最坏的情况。当每个分区都极度不平衡时,最坏的情况就会发生。在这种情况下,递归关系是

T(n) = T(n-1) + O(n) 
= T(n-1) + cn

重复展开显示这是O(n^2)。因此,在最坏的情况下,QuickHull 是二次的。


http://www.personal.kent.edu/~rmuhamma/Compgeometry/MyCG/ConvexHull/quickHull.htm

关于java - QuickHull 算法的复杂性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13524344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com