问题
我必须计算线性时间O(n)中一组二维点的直径。
为了做到这一点,我想到了使用最小轴平行边界框,可以用线性时间计算旋转卡尺从凸多边形开始。
遗憾的是,我没有凸多边形,并且由于凸包,计算它需要O(nlogn)时间。
我的想法是使用基数排序,然后通过单调链算法计算凸包(如果输入已排序,则需要线性时间)。
现在我的问题是:
提前谢谢!
修改
我特别需要最小边界框,因为我必须为直径设计一个sqrt(2)近似算法,这是我知道证明这种近似的唯一方法。
答案 0 :(得分:2)
如果您正在寻找一组积分的直径,Welzl's algorithm可能是您最好的选择。它在线性时间内找到最小的封闭圆。
编辑:我没有意识到你需要来制作一个盒子。要找到最小边界框的轴对齐边界,您只需要对数据进行线性扫描并获取(x,y)坐标的相应最小/最大值。