【发布时间】:2017-06-21 16:04:35
【问题描述】:
我有一个算法可以计算每个点p(我的坐标值以一个元组表示)到我的元组列表中的每个其他元组的距离。
点列表:
centerList = [(54, 2991),
(1717, 2989),
(1683, 2991),
(1604, 2991),
(114, 2991),
(919,222),
(930,233)]
距离函数:
def getDistance(p0, p1):
return math.sqrt((p0[0] - p1[0])**2 + (p0[1] - p1[1])**2)
计算点p 到元组列表中每个其他点的距离的算法。
i = 0
distanceList = []
for p in range(len(centerList)):
while i < len(centerList):
print centerList[p], centerList[i], getDistance(centerList[p], centerList[i])
distance = getDistance(centerList[p], centerList[i])
if distance < 20:
distanceList.append(distance)
i += 1
i = p + 2
我当前的算法以一种并非多余的方式递增,但在当前状态下,它对于实际应用程序来说太粗暴了。我的问题在于我的实际centerList 包含数千个元组。
可以做些什么来提高这种元组比较算法的时间效率?
【问题讨论】:
-
看起来您正在尝试计算每对点之间的距离。这本质上是 O(n^2),所以你可能想要并行化这个
-
对于初学者,您可以放弃 sqrt。
-
我猜你的算法有问题。
distance = getDistance(centerList[p], centerList[i])第一次迭代比较centerList[0]和centerlist[0]。这不会发生在i将是i = p + 2的后续迭代中。第一次迭代:getDistance(centerList[0], centerList[0]),第二次迭代:getDistance(centerList[1], centerList[2])... 为什么?从数学上讲,比较与同一点的距离为零。如果 x 和 y 以及 x=y 的距离,则 x 到 y 的距离为零。 -
是的,很好。这就是我运行
if distance < 20 and distance > 0的原因
标签: python algorithm list distance point