最近点对问题在计算几何中是众所周知的:给定一个点列表 (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;
这种方法很简单,但计算起来很慢。我想知道是否有一些快速算法可以解决这个问题。谢谢!