【发布时间】:2011-06-29 16:52:07
【问题描述】:
在我的程序中,我有一组点。出于重新缩放的目的,我正在搜索相距最远的两个节点,然后计算一个因子,将所有坐标相乘以使最大距离等于我定义的某个预定义的距离。
但是,我用来找到相距最远的两个点的算法对于大量点集是有问题的,因为它是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
有更快的方法吗?
【问题讨论】:
-
看到John Feminella's excellent answer这个类似的问题。对于平均情况,您应该得到 O(n log n)。
-
尽管如此,它仍然是 n^2 最坏的情况,而且很容易找到比幼稚代码更糟糕的实例。因此,如果您知道您的积分是“随机”分布的,那很好,但如果它们是对抗性选择的,那就不好了。
-
是的。我同意 Martin 的观点,集群是一个很大的帮助,我在许多地理感知应用程序中为此使用了 geohashing。
-
凸包可以在 O(n ln n) 最坏情况下计算。通过在凸包中搜索对映点来找到集合的直径需要 O(n) 时间。更多细节在我的回答中
标签: algorithm math language-agnostic geometry