最宽路径和最长路径问题之间有什么区别?更具体地说,为什么前者可以通过找到最大生成树来解决,而后者则不能。我知道在绘制最大生成树时,很明显它不一定包含最长的路径,但我无法理解这两个问题之间的区别是什么使得这个事实成真。
感谢。
答案 0 :(得分:1)
这两个问题之间的主要区别在于,最宽的路径问题表现出最佳的子结构,而最长的路径问题(据任何人的知识)并没有。
具体来说,考虑从节点u到节点v的最宽路径。如果该路径通过中间节点s,那么从u到v的最宽路径必须包含从u到s的最宽路径,然后是最宽的路径从s到v的路径。如果没有,那么你可以用一条更宽的路径替换从u到s或从s到v的路径的任何一部分,而不会使解决方案更糟。
但是,这对于最长路径问题不起作用。如果从u到v采用最长路径(隐式地,最长的简单路径)并且它通过某个节点s,那么 not 必须具有从u到s的最长路径,然后是最长路径从s到v。这是一个例子:
2
u --- v
1 \ / 3
s
从u到s的最长路径由路径u - v - s(长度5)组成,而从u到v的最长路径是u - s - v(长度4)。
这种最优的子结构特性使得有可能使用贪婪算法和(高效)动态编程来有效地解决最宽的路径问题,但是(据任何人的知识)不可能有效地解决最长路径问题。顺便说一句,你可以对最短路径做一个类似的论证(如果从u到v的最短路径经过s,你有从u到s和从s到v的最短路径的连接),你可以使用类似的贪心算法或DP也可以确定最短路径。
希望这有帮助!