【问题标题】:What is the difference between Travelling Salesman and finding Shortest Path?旅行推销员和寻找最短路径有什么区别?
【发布时间】:2011-12-07 11:38:31
【问题描述】:

对于这个问题,我能想到的唯一区别是,在the Travelling Salesman Problem (TSP) 中,我需要找到一个 图中所有顶点的最小排列,在最短路径问题中,无需考虑所有顶点,我们可以搜索状态空间以找到最小路径长度路线,任何人都可以提出更多差异。

【问题讨论】:

  • 这是 CLRS 练习 1.1-4

标签: algorithm


【解决方案1】:

在 TSP 中,您既需要访问所有节点,也需要返回起点。这使问题变得非常复杂。

【讨论】:

  • 我认为在 TSP 中,我们有一条从每个顶点到每个其他顶点的路径,考虑到我认为我们可以到达的无向路径,不是吗?
  • 是的,但是 TSP 也可以在某些方面受到约束——例如,有向路径、加权路径以及它们之间没有路径的顶点。这是同一个问题的所有变体。
  • 我认为这是一个完全误导的答案。使问题变得非常复杂的是必须找到一条访问所有节点的路径,而不是必须返回到起始节点(例如,参见Hamilton路径,这也是NP-完成,但不需要找到循环)。
【解决方案2】:

您已经指出了本质的区别:TSP 是找到一条包含图中每个节点的排列的路径,而在最短路径问题中,任何给定的最短路径可能,并且经常包含图中节点的适当子集。

其他差异包括:

  • TSP 解决方案要求其答案是一个循环。
  • TSP 解决方案必然会在其路径中重复一个节点,而最短路径则不会(除非寻找从节点到自身的最短路径)。
  • TSP 是一个 NP 完全问题,最短路径是已知多项式时间。

如果您正在寻找差异的精确陈述,我会说您只需用更技术和更精确的术语“简单循环访问图中的每个节点”替换您对“排列”的想法,或者更好, “汉密尔顿循环”:

TSP 要求找到覆盖图中每个节点的权重最小的简单环(或者,权重最小的 Hamilton 环)。最短路径问题需要找到两个给定节点之间权重最小的路径。最短路径不必是哈密顿量,也不必是循环。

【讨论】:

  • 是的,这就是我能找到的,但我需要一个更合乎逻辑和合理的更普遍的区别
  • 如果一个算法需要 lg(n) 微秒来解决一个问题,你能告诉我这个问题的答案吗?我们需要确定使用该算法在 1 中可以解决的问题的最大大小是多少秒
  • 是的,假设复杂度正好是lg(n) 步骤(而不是,比如说,5lg(n)+1000 步骤。如果T(n) = lg(n) 微秒,那么T(n) = (10^-6)(lg(n)) 秒,或者lg(n) = (10^6)T(n) 让@ 987654326@ 所以lg(n) = 10^62^lg(n) = 2^(10^6) 表示n = 2 的百万分之一次方。恕我直言,这个数字超出了人类的理解范围。
【解决方案3】:

对于最短路径问题,您考虑两个节点之间的路径。使用 TSP,您可以考虑所有节点之间的路径。这使得后者更加困难。

考虑节点 A 和 B 之间的两条路径。一条在 D 上,另一条在 C 上。设 C 上的一条为更长的路径。在最短路径问题中,这条路径可以立即被丢弃。在 TSP 中,这条路径很可能是整体解决方案的一部分,因为您必须访问 C 并且稍后访问它可能会更加昂贵。

因此,您不能将 TSP 分解为类似但较小的子问题。

【讨论】:

    【解决方案4】:

    最短路径只有源和目标。我们需要找到它们之间的最短路径,显然输出必须是多项式时间的树。

    寻找最短路径:-

    • 无向图: 列表 O(V^2) 的 Dijkstra 算法

    • 具有任意权重且无负环的有向图: Bellman-Ford 算法时间复杂度 O(VE)

    • Floyd–Warshall 算法用于查找所有对之间的最短路径

    TSP(Travelling-Salesman Problem)并不是说我们从源头覆盖了每个节点,最后我们以最小的成本到达源头。最终必须有循环。 TSP 是一个 NP 完全问题

    参考:

    https://en.wikipedia.org/wiki/Shortest_path_problem

    https://en.wikipedia.org/wiki/Travelling_salesman_problem

    http://www.geeksforgeeks.org/travelling-salesman-problem-set-1/

    http://www.geeksforgeeks.org/greedy-algorithms-set-6-dijkstras-shortest-path-algorithm/

    https://www.hackerearth.com/practice/algorithms/graphs/shortest-path-algorithms/tutorial/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-25
      • 2014-10-16
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      • 2015-06-22
      • 1970-01-01
      相关资源
      最近更新 更多