更快地找到所有对欧几里德距离的c ++方法

时间:2013-04-12 11:19:36

标签: algorithm geometry

说,在D维欧氏空间中,给出N个格点,(例如:最高6D空间是可能的),现在你必须找到所有对欧几里德距离。现在我们通常使用n ^ 2循环,但是如果N = 5000,那么这个O(n ^ 2)太慢了,那么有没有找到距离的有效方法呢?

2 个答案:

答案 0 :(得分:1)

有N *(N-1)/ 2对,所以O(N ^ 2)是最佳时间

答案 1 :(得分:0)

虽然@MBo是正确的,因为O(N^2)是最好的大O时间,如果这些点确实在一种特殊的格子上,即一个矩形格子,你可以利用对称来降低前因子。一般来说,我们可以假设我们有一个D维方格子,它在每个方向上最多m个单位向外延伸。这会给出N=2*d*m分。我们只需计算此晶格中的上象限,因为其他尺寸将相同。例如,在2D中考虑点:

(3,4)   -> 5
(-3,4)  -> 5 
(3,-4)  -> 5 
(-3,-4) -> 5 

通常,您可以通过因子(2^d-1)来减少计算,这对于更高维度而言非常重要。在6维中,这是63的常数因子。