Performance Quickhull-凸面外壳上的所有点-性能差

Performance Quickhull-凸面外壳上的所有点-性能差,performance,computational-geometry,convex-hull,Performance,Computational Geometry,Convex Hull,当输入中的所有点都位于凸包上时,如何避免quickhull算法中的不良性能?quickhull的性能主要来自能够在每次递归调用(或迭代)时丢弃一部分输入。不幸的是,当所有点都位于一个圆上时,这种情况不会发生。即使在这种情况下,如果拆分步骤在每次递归调用时都提供了一个相当平衡的分区,那么仍然有可能获得O(nlog n)最坏情况下的性能。最终导致二次运行时的最坏情况是在每次调用中出现严重不平衡的拆分(例如,一个拆分总是以空结尾)。因为这在很大程度上取决于数据集,人们对此无能为力 您可能希望尝试其他算

当输入中的所有点都位于凸包上时,如何避免quickhull算法中的不良性能?

quickhull的性能主要来自能够在每次递归调用(或迭代)时丢弃一部分输入。不幸的是,当所有点都位于一个圆上时,这种情况不会发生。即使在这种情况下,如果拆分步骤在每次递归调用时都提供了一个相当平衡的分区,那么仍然有可能获得O(nlog n)最坏情况下的性能。最终导致二次运行时的最坏情况是在每次调用中出现严重不平衡的拆分(例如,一个拆分总是以空结尾)。因为这在很大程度上取决于数据集,人们对此无能为力


您可能希望尝试其他算法,例如,或。两者都保证了O(nlog n)最坏情况下的时间复杂度。

对于一些算法实现比较,我建议看我的文章:其中比较了许多2D算法的性能,如:

  • 单调链
  • 格雷厄姆扫描
  • 德洛奈/沃罗诺
  • 成龙
  • 刘和陈
  • 奥莱特(我的)

您是否提前知道(即在运行quickhull之前)所有点都将在外壳中?quickhull算法的复杂性(直接)不取决于凸面外壳上点的百分比(例如,在礼品包装算法中观察到的情况)