繁体   English   中英

通过一组点的最短路径

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM