距离计算优化

时间:2017-02-24 12:09:19

标签: algorithm

我正在编写一个计算2d平面中点的最近邻居的算法。目前,我通过两个for循环计算每个距离的暴力

for(i=0; i<N ;i++){
   for (j=0; j<N; j++{ 
      /* distance computation */
      /* remember smallest distance for all i */
   }
}

我已经有if(i==j) continue;语句,以便我们避免计算相同点之间的距离。我想知道如何进一步优化此算法。例如,我如何解释距离(i,j)=距离(j,i)的对称性?还有其他一点我应该考虑一下吗?

此外,您能否向我描述一种更好的方法来执行此计算?我已经研究过二叉树,但我不确定它们实际上是如何应用于我的问题的!

3 个答案:

答案 0 :(得分:2)

您想使用quadtrees作为数据结构

nice post为您提供有关如何继续

的详细信息

答案 1 :(得分:1)

您可以在j处开始i+1来说明对称性。这也将在没有特殊情况的情况下处理i == j情况:

for (i = 0 ; i != N ; i++) {
    for (int j = i+1 ; j != N ; j++) {
        dist = ... // Compute the distance
        distance[i][j] = distance[j][i] = dist; // Set in both directions
    }
}

答案 2 :(得分:-1)

计算(0,0)到所有点之间的距离。 然后按升序对距离进行排序。

现在,特定点的继承者和前身是最近的邻居。