使用曼哈顿距离寻找最近的一对

时间:2015-09-13 05:54:10

标签: algorithm

我试图用曼哈顿距离实现最近对算法。由于欧氏距离,它工作得很好,但是在曼哈顿距离的情况下,它给出了错误的结果。 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]

1 个答案:

答案 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;使用规范,你会发现曼哈顿圆圈比圆形更加方形。