Algorithm 利用曼哈顿距离寻找最近对
我试图用曼哈顿距离来实现最近对算法。对于欧几里德距离,它运行良好,但是对于曼哈顿距离,它给出了错误的结果。CLRS练习33.4-3要求我们将欧几里德距离替换为曼哈顿距离。他们只是要求我们更改一行代码,但这不是下面代码中需要修改的内容Algorithm 利用曼哈顿距离寻找最近对,algorithm,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 = ab
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]
lst=[(2,2)、(4,2)、(5,3)]
最小距离=浮动(“inf”)
对于范围内的i(len(lst)):
对于范围(i+1,len(lst))内的j:
dist=abs(lst[i][0]-lst[j][0])+abs(lst[i][1]-lst[j][1])
如果(距离<最小距离):
最小距离=距离
全局minp1,minp2
minp1=lst[i]
minp2=lst[j]
我猜两种距离的程序的结果是不同的。
事实上,在欧几里德距离中,最近的一对是(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)
。为了具体了解这两种距离的不同程度,您可以使用标准来绘制“单位圆”,您将看到曼哈顿圆更像正方形而不是圆形。我猜两种距离的程序的结果是不同的。
事实上,在欧几里德距离中,最近的一对是(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)
。为了具体了解这两种距离有多大的不同,您可能需要绘制“单位圆”作为标准,这样您就会看到曼哈顿圆更像正方形而不是圆形。请解释您得到的错误结果和您的预期。巧合?请解释一下你得到了什么错误的结果和你的预期。巧合?