- 请参考教材98页,算法6.6,先来个常规算法,复杂度为n的平方,结合Python的优势,代码整短点,顺便绘制下图形,算法思路简单,不多说了,注意陷阱。
- 上代码了:
#coding=utf-8
import math
import matplotlib.pyplot as plt
def closestpair_simple(X, n):
#对于n个数据点,计算n(n-1)/2个数就可以了
dist = [[distance(X[i], X[j]), i, j] for i in range(len(X)) for j in range(i+1,len(X))]
return min(dist)[0], [min(dist)[1], min(dist)[2]]
def distance(a, b):
return math.sqrt(math.pow(a[0]-b[0], 2)+math.pow(a[1]-b[1], 2))
if __name__ == "__main__":
points = [(2,3), (10, 1), (3, 25), (23,15), (18,3), (8,9), (12,30), (25,30), (9,2),
(13,10), (3,4), (5,6), (22,32), (5,32), (23,9), (19,25), (14,1), (11,25), (26,26),
(12,9), (18,9), (27,13), (32,13)]
print (closestpair_simple(points, len(points)))
#绘制这些点
x = [points[i][0] for i in range(len(points)) ]
y = [points[j][1] for j in r