找到最远的点的算法 – 优于O(n ^ 2)?

在我的节目中,我有一个点.为了重新缩放,我正在搜索最远的两个节点,然后计算一个乘积乘以所有坐标的因子,使得最大距离等于我定义的一些预定义的距离.

然而,我使用的算法来找出最远的两个点,因为它是O(n ^ 2)的大集合点是有问题的;伪代码(已经计算出的距离被跳过):

 for each point in points:
     for each other point in points:
         if distance between point and other point > max
             max = distance between point and other point

有更快的东西吗?

如果您只需要刻度,而不是精确点,您可以在O(n)时间内使用一些误差范围.想想制作边框的简单情况.计算所有点的最小x值,最大值x,最小值y和最大值y.这四个数字给你一个围绕你的点的最大边界框,最大误差为1 – (1 / sqrt(2)))约30%.您可以通过向广场添加更多方面来减少这种情况.想想八边形的情况.要计算其他方的最小和最大值,您必须旋转坐标系.

错误vs运行时间如此分解.

形状 – 运行时间 – 最大误差

> square – 2N – 30%
>八角形 – 4N – 16%
> 16面 – 8N – 4%
> 32边 – 16N – 1%

这是我想出的最大误差的方程式.

angle = 180 / sides
max_error = (1 / cos angle) - cos angle

让我知道如果我应该添加一个解释这个的图表.

翻译自:https://stackoverflow.com/questions/6524350/algorithm-to-find-points-that-are-furthest-apart-better-than-on2

转载注明原文:找到最远的点的算法 – 优于O(n ^ 2)?