【问题标题】:Shortest path trough a set of points通过一组点的最短路径
【发布时间】:2020-01-14 20:24:30
【问题描述】:

我有一组点(用复数值表示),我需要找到通过这些点的最短路径。它看起来有点像旅行推销员问题,但我似乎无法找到(或理解)不在 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”的列表是这样构建的:

taile[i] = abs(liste[i] - liste[i+1])

列表[-1] = 列表[0]

【问题讨论】:

  • 既然您认识到这是旅行商问题,那么您如何期望一个有效的算法能够找到准确的答案?
  • 您对问题的解释不完整。如果您需要找到通过点的最短路径,则需要知道点之间的路径长度。与用于的每个点相关联的复数是多少?你不解释。

标签: python-3.x algorithm sorting optimization big-o


【解决方案1】:

从您的描述中我了解到,这确实是 TSP 问题。这是一个众所周知的NP-hard问题,因此不存在解决它的高效算法(即使存在,我们也不知道然而)。这是计算机科学中著名的开放问题之一。

确实,请尝试解决它,但不要屏住呼吸:)

一般阅读:https://en.wikipedia.org/wiki/Travelling_salesman_problem

您可能还想快速阅读:https://en.wikipedia.org/wiki/P_versus_NP_problem

【讨论】:

    猜你喜欢
    • 2020-03-04
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多