我正在尝试编写最接近对算法的暴力版本,而不使用嵌套for循环。这是我写的代码,但是代码给了我0.0,因为我在计算点与它们之间的距离。如何更改代码以获得正确的最小距离?你知道吗
import math
x = [4, -2, -3, -1, 2, -4, 1, -1, 3, -4, -2]
y = [4, -2, -4, 3, 3, 0, 1, -1, -1, 2, 4]
def _ClosestPair(x,y):
Px = sorted(list(zip(x,y)), key = lambda elem: elem[0])
return ClosestPairNaive(Px)
def ClosestPairNaive(points):
dis = lambda p, q: math.sqrt((p[0]-q[0])**2 + (p[1] - q[1])**2)
return min([dis(p,q) for p in points[:len(points)-1] for q in points[1:]])
print(_ClosestPair(x, y))
在列表中的每个位置唯一对上循环的惯用方法是从内部循环中的
i + 1
开始:在处理序列类型时,它是一个简单而有效的算法。你知道吗
还要注意,
math
有一个方便的hypot
函数,它只是欧几里德范数。因此,您可以简单地将其实现为:请注意,将lambda表达式的结果指定给名称是针对PEP8的。因此,应该使用
snake_case
而不是CapitalCase
作为函数名。你知道吗单一语句
相关问题 更多 >
编程相关推荐