当输入中的所有点都位于凸包上时,如何避免quickhull算法中的不良性能?
答案 0 :(得分:2)
QuickHull的性能主要来自于能够在每次递归调用(或迭代)时丢弃一部分输入。不幸的是,当所有点都位于圆上时,这不会发生。即使在这种情况下,如果分割步骤在每次递归调用时给出相当平衡的分区,仍然可以获得 O(nlog n)最坏情况性能。导致二次运行的最终最坏情况是当我们在每次调用中有非常不平衡的分裂(比如一个分裂总是空的)。因为这很大程度上取决于数据集,所以没有什么可以做的。
您可能希望尝试使用其他算法,例如Andrew's variant of Graham's scan或MergeHull。两者都保证 O(nlog n)最坏情况下的时间复杂度。
答案 1 :(得分:0)
对于某些算法实现比较,我建议查看我的文章:Fast and improved 2D Convex Hull algorithm and its implementation in O(n log h),它比较了许多2D算法的性能,如: