问题描述
显而易见的O(N ^ 2)是计算每对点之间的欧几里得距离。我已经在Python中实现(省略了calc_euclidean_dist()实现):
def closestPointPair(pairs):
min_dist = sys.maxsize
for i in range(len(pairs)):
for j in range(i+1,len(pairs)):
dist = calc_euclidean_dist(pairs[i],pairs[j])
if dist < min_dist:
min_dist = dist
return min_dist
有更好的解决方案吗?也许要点积分?
解决方法
最近的点对问题具有众所周知的解决方案(如@dxiv所指出)。 https://en.wikipedia.org/wiki/Closest_pair_of_points_problem
在最坏的情况下,它的时间复杂度为O(N log N),并且实现起来并不难。