【问题标题】:Quickhull - all points on convex hull - bad performanceQuickhull - 凸包上的所有点 - 性能不佳
【发布时间】:2012-05-13 07:24:28
【问题描述】:

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

【问题讨论】:

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

标签: performance computational-geometry convex-hull


【解决方案1】:

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

您可能想尝试其他算法,例如Andrew's variant of Graham's scan 或MergeHull。两者都保证了 O(nlog n) 最坏情况的时间复杂度。

【讨论】:

    【解决方案2】:

    对于一些算法实现比较,我建议看我的文章:Fast and improved 2D Convex Hull algorithm and its implementation in O(n log h),它比较了许多 2D 算法的性能,例如:

    • 单调链
    • 格雷厄姆扫描
    • 德劳内/Voronoi
    • 陈
    • 刘和陈
    • Ouellet(我的)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-23
      • 2011-01-08
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 2017-09-26
      • 2013-10-09
      • 2018-08-14
      相关资源
      最近更新 更多