【发布时间】:2018-06-12 08:58:54
【问题描述】:
问题
我必须在线性时间 O(n) 内计算一组二维点的直径。
为了做到这一点,我想到了使用从凸多边形开始的旋转卡尺可以在线性时间内计算出的最小平行轴边界框。
不幸的是,我没有凸多边形,由于凸包,计算它需要 O(nlogn) 时间。
我的想法是使用基数排序,然后通过单调链算法计算凸包(如果输入被排序则需要线性时间)。
现在我的问题是:
- 如何确定基数排序将在线性时间内运行?
- 您有更好的方法来计算线性时间内的最小平行轴边界框吗?
提前谢谢你!
编辑
我特别需要最小边界框,因为我必须为直径设计一个 sqrt(2) 近似算法,这是我知道证明这种近似的唯一方法。
【问题讨论】:
-
基数排序仅适用于整数输入。您的数据是否保证为整数?
-
您不能对数据进行线性扫描,获取 x/y 坐标的适当最小/最大值以获得与轴对齐的边界吗?
-
你完全正确,我太笨了。请发布您的解决方案,以便我可以将其视为解决方案。非常感谢!
-
别担心,我一直都很笨 :-) 我已经适当地编辑了我的答案。而且,这个近似的想法很酷。
标签: algorithm bounding-box convex-hull radix-sort