说,在D维欧氏空间中,给出N个格点,(例如:最高6D空间是可能的),现在你必须找到所有对欧几里德距离。现在我们通常使用n ^ 2循环,但是如果N = 5000,那么这个O(n ^ 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
的常数因子。