高效计算一组点的所有成对距离的总和,所有这些都在有限的2D网格上

时间:2017-03-23 12:32:44

标签: algorithm 2d euclidean-distance

n平面中给出一组2D点。我们需要找到每个点与其他每个点之间的欧几里德距离之和,即ΣΣdist(P(i)P(j))i:[1,n-1] j:[i+1,n]。对于每个点P(xi,yi)1<=xi<=5001<=yi<=500,我们也会这样做。我知道这可以在O(n ^ 2)中完成。但想知道它是否可以更有效地完成。有关如何进一步优化它的任何帮助。

1 个答案:

答案 0 :(得分:4)

如果坐标是任意的,我不知道如何做得比O(n^2)更好,但在你的情况下,你可以使用以下注释:

如果1<=xi<=5001<=yi<=500是整数值,则最多只有250000个不同点。

因此,在大量点的情况下,您可以计算实际存在多少个不同的点(有界),以及每个点出现的次数(考虑一个哈希映射)。完成此操作后,您将拥有一组不同的点P(i),并且您知道m(i)P(i)出现在原始集中的次数,并且您可以计算所需的数量如下:ΣΣm(i)m(j)dist(P(i)P(j))。现在,复杂性仅为O(n),以便阅读输入。

然而,隐藏在O(n)符号中的常量很大。如果您500代表xiyi代表非固定k而不是O(min(n^2,n+k^2)),那么我所指出的只是复杂性为{{1}} }

如果您只需要近似值,那么您可以做其他事情。 (随机抽样,将关闭点划分为群集......)