最接近的一对点问题在计算几何中是众所周知的:给定点列表(x,y)找到具有最小欧几里得距离的点对。现在我对这个问题有一个变化,要求:给定一个n个点(xi,yi)(n + 1> i> 0)的列表,找出每个点(xi,yi)的最近的欧几里德距离,然后计算所有点的平均最近欧几里德距离。我知道的蛮力方法:最接近点对的变化算法
all_distance = [];
for i= 1 to n
p = (xi,yi);
dis = [];
for j= 1 to n
if j==i
continue;
else
q = (xj,yj);
pt_dis = distance(p,q);
end
dis = [dis; pt_dis];
end
all_distance = [all_distance; nearest(dis)]
end
mean_distance = all_distance/n;
这种方法很简单,但计算速度慢。我想知道是否有一些快速算法来解决这个问题。谢谢!
如果分布间隔相对均匀但非均匀分布失败,则方法工作正常。 kd树或四叉树方法在所有情况下都更快,包括均匀分布。 – atb 2012-07-18 18:17:33