【发布时间】:2011-12-07 11:38:31
【问题描述】:
对于这个问题,我能想到的唯一区别是,在the Travelling Salesman Problem (TSP) 中,我需要找到一个 图中所有顶点的最小排列,在最短路径问题中,无需考虑所有顶点,我们可以搜索状态空间以找到最小路径长度路线,任何人都可以提出更多差异。
【问题讨论】:
-
这是 CLRS 练习 1.1-4
标签: algorithm
对于这个问题,我能想到的唯一区别是,在the Travelling Salesman Problem (TSP) 中,我需要找到一个 图中所有顶点的最小排列,在最短路径问题中,无需考虑所有顶点,我们可以搜索状态空间以找到最小路径长度路线,任何人都可以提出更多差异。
【问题讨论】:
标签: algorithm
在 TSP 中,您既需要访问所有节点,也需要返回起点。这使问题变得非常复杂。
【讨论】:
您已经指出了本质的区别:TSP 是找到一条包含图中每个节点的排列的路径,而在最短路径问题中,任何给定的最短路径可能,并且经常包含图中节点的适当子集。
其他差异包括:
如果您正在寻找差异的精确陈述,我会说您只需用更技术和更精确的术语“简单循环访问图中的每个节点”替换您对“排列”的想法,或者更好, “汉密尔顿循环”:
TSP 要求找到覆盖图中每个节点的权重最小的简单环(或者,权重最小的 Hamilton 环)。最短路径问题需要找到两个给定节点之间权重最小的路径。最短路径不必是哈密顿量,也不必是循环。
【讨论】:
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^6 或2^lg(n) = 2^(10^6) 表示n = 2 的百万分之一次方。恕我直言,这个数字超出了人类的理解范围。
对于最短路径问题,您考虑两个节点之间的路径。使用 TSP,您可以考虑所有节点之间的路径。这使得后者更加困难。
考虑节点 A 和 B 之间的两条路径。一条在 D 上,另一条在 C 上。设 C 上的一条为更长的路径。在最短路径问题中,这条路径可以立即被丢弃。在 TSP 中,这条路径很可能是整体解决方案的一部分,因为您必须访问 C 并且稍后访问它可能会更加昂贵。
因此,您不能将 TSP 分解为类似但较小的子问题。
【讨论】:
最短路径只有源和目标。我们需要找到它们之间的最短路径,显然输出必须是多项式时间的树。
寻找最短路径:-
无向图: 列表 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/
【讨论】: