【问题标题】:Minimum axis-parallel bounding box in linear time线性时间内的最小轴平行边界框
【发布时间】:2018-06-12 08:58:54
【问题描述】:

问题
我必须在线性时间 O(n) 内计算一组二维点的直径。

为了做到这一点,我想到了使用从凸多边形开始的旋转卡尺可以在线性时间内计算出的最小平行轴边界框。
不幸的是,我没有凸多边形,由于凸包,计算它需要 O(nlogn) 时间。

我的想法是使用基数排序,然后通过单调链算法计算凸包(如果输入被排序则需要线性时间)。

现在我的问题是:

  • 如何确定基数排序将在线性时间内运行?
  • 您有更好的方法来计算线性时间内的最小平行轴边界框吗?

提前谢谢你!

编辑
我特别需要最小边界框,因为我必须为直径设计一个 sqrt(2) 近似算法,这是我知道证明这种近似的唯一方法。

【问题讨论】:

  • 基数排序仅适用于整数输入。您的数据是否保证为整数?
  • 您不能对数据进行线性扫描,获取 x/y 坐标的适当最小/最大值以获得与轴对齐的边界吗?
  • 你完全正确,我太笨了。请发布您的解决方案,以便我可以将其视为解决方案。非常感谢!
  • 别担心,我一直都很笨 :-) 我已经适当地编辑了我的答案。而且,这个近似的想法很酷。

标签: algorithm bounding-box convex-hull radix-sort


【解决方案1】:

如果您正在寻找一组点的直径Welzl's algorithm 可能是您最好的选择。它在线性时间内找到最小的封闭圆。

编辑:我没有意识到你需要制作一个盒子。要找到最小边界框的轴对齐边界,您只需对数据进行线性扫描并获取 (x,y) 坐标的适当最小/最大值。

【讨论】:

  • 非常感谢。我已经知道这个算法,但不幸的是我需要最小边界框,因为我必须设计一个 sqrt(2) 近似算法,这是我知道证明这个近似的唯一方法。
  • @Benny:啊,好吧。在你的问题中提到这一点会很好。我会考虑如何实现它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-17
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 2020-12-08
相关资源
最近更新 更多