![](/img/trans.png)
[英]I have 100 points and using the distance function I wanted to look for the shortest path
[英]Shortest path trough a set of points
我有一组点(由复数值表示),我需要找到通过这些点的最短路径。 它看起来有点像旅行商问题,但我似乎无法找到(或理解)不在 O(n!) 中的解决方案。 我知道如何在 O(n^3)、O(n²) 中计算足够短的解决方案,但我想知道是否有可能拥有最好的解决方案。 谢谢 ! 这是我用于“足够短的路径”的代码
def insert(x,liste,taille):
max_add = 10**9
n = len(liste) -1
for i in range(n):
test = abs(liste[i] -x) + abs(liste[i+1] - x) - taille[i]
if test < max_add:
max_add = test
i_max = i
taille[i_max] = abs(liste[i_max]-x)
taille.insert(i_max+1,abs(liste[i_max+1] - x))
liste.insert(i_max+1,x)
def sort(x,i=0):
taille = [0]
tri = [x[i]]*2
for y in x[:i]+x[i+1:]:
inserer(y,tri,taille)
return tri, taille
def the_best(liste):
n = len(liste)
shortest = 10**9
for i in range(n):
a,b = sort(liste,i)
if sum(b) < shortest:
back = a,b
return back
` 当然,“the_best”函数在 O(n^3) 中,所以我通常只使用“sort”函数。名为“taille”的列表是这样构建的:
尾[i] = abs(liste[i] - liste[i+1])
列表[-1] = 列表[0]
根据我在您的描述中的理解,这确实是 TSP 问题。 这是一个众所周知的NP-hard问题,因此不存在解决它的有效算法(即使存在,我们也不知道)。 这是计算机科学中著名的开放问题之一。
确实,请尝试解决它,但不要屏住呼吸:)
一般阅读: https : //en.wikipedia.org/wiki/Travelling_salesman_problem
您可能还想快速阅读: https : //en.wikipedia.org/wiki/P_versus_NP_problem
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.