说,在 D 维欧几里得空间中,给定 N 个格点,(例如:最高 6D 空间是可能的),现在你必须找到所有对欧几里得距离。现在我们一般用 n^2 循环,但是如果 N = 5000,那么这个 O(n^2) 太慢了,那么有什么有效的方法来找到距离吗?
问问题
521 次
2 回答
1
有 N*(N-1)/2 对,所以 O(N^2) 是可能的最佳时间
于 2013-04-12T11:24:25.733 回答
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
。
于 2013-04-12T14:47:55.437 回答