在n
平面中给出一组2D
点。我们需要找到每个点与其他每个点之间的欧几里德距离之和,即ΣΣdist(P(i)P(j))
,i:[1,n-1]
j:[i+1,n]
。对于每个点P(xi,yi)
:1<=xi<=500
和1<=yi<=500
,我们也会这样做。我知道这可以在O(n ^ 2)中完成。但想知道它是否可以更有效地完成。有关如何进一步优化它的任何帮助。
答案 0 :(得分:4)
如果坐标是任意的,我不知道如何做得比O(n^2)
更好,但在你的情况下,你可以使用以下注释:
如果1<=xi<=500
和1<=yi<=500
是整数值,则最多只有250000
个不同点。
因此,在大量点的情况下,您可以计算实际存在多少个不同的点(有界),以及每个点出现的次数(考虑一个哈希映射)。完成此操作后,您将拥有一组不同的点P(i)
,并且您知道m(i)
,P(i)
出现在原始集中的次数,并且您可以计算所需的数量如下:ΣΣm(i)m(j)dist(P(i)P(j))
。现在,复杂性仅为O(n)
,以便阅读输入。
然而,隐藏在O(n)
符号中的常量很大。如果您500
代表xi
而yi
代表非固定k
而不是O(min(n^2,n+k^2))
,那么我所指出的只是复杂性为{{1}} }
如果您只需要近似值,那么您可以做其他事情。 (随机抽样,将关闭点划分为群集......)