我试图用曼哈顿距离实现最近对算法。由于欧氏距离,它工作得很好,但是在曼哈顿距离的情况下,它给出了错误的结果。 CLRS练习33.4-3要求我们用曼哈顿距离代替欧几里德距离。他们只是要求我们改变一行,但是下面的代码不需要修改。
lst = [(2,2),(4,2),(5,3)]
min_dist = float("inf")
for i in range(len(lst)):
for j in range(i + 1 , len(lst)):
dist = abs(lst[i][0] - lst[j][0]) + abs(lst[i][1] - lst[j][1])
if(dist < min_dist):
min_dist = dist
global minp1, minp2
minp1 = lst[i]
minp2 = lst[j]
答案 0 :(得分:0)
我猜两个距离的节目结果都不同。
实际上,对于欧几里德距离,最近的一对是(4,2)-(5,3)
,而对于曼哈顿距离,(2,2)-(4,2)
和(4,2)-(5,3)
都是最接近的对。根据你的程序,你只按照出现的顺序拿起第一个,结果是(2,2)-(4,2)
。如果你的程序会返回所有最近的对,你会看到(4,2)-(5,3)
。
但总的来说,两个计划的结果没有理由相同。例如,在您的示例中,将(5,3)
更改为(5,3.1)
。为了具体了解两个距离的差异,你可以用它来绘制&#34;单位圆&#34;使用规范,你会发现曼哈顿圆圈比圆形更加方形。