我正在编写一个计算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)的对称性?还有其他一点我应该考虑一下吗?
此外,您能否向我描述一种更好的方法来执行此计算?我已经研究过二叉树,但我不确定它们实际上是如何应用于我的问题的!
答案 0 :(得分:2)
答案 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)到所有点之间的距离。 然后按升序对距离进行排序。
现在,特定点的继承者和前身是最近的邻居。