我只是想知道:你可以在图表中反转所有权重,然后做一个Dijkstra吗?当我们最小化权重的倒数值时,获得的路径将最大化它,对吧? 因此,通过这种方式,我们可以使用Dijkstra获得图表中最长的路径! 这似乎太容易了,我错了吗?拜托,赐教。
答案 0 :(得分:0)
这是不可能的,因为longest path problem
没有像shortest path
那样的最佳子结构问题。
假设您可以将任何路径视为最长路径(因此它可以具有循环)但是如果存在循环并且权重为正,则算法将永远不会结束,因为它总是可以通过循环遍历来改善最长路径。
现在说我们想要只有简单的路径(没有循环)作为最长路径的候选路径。在不失一般性的情况下,考虑以下具有所有边的单位权重的图:
A------B
| |
| |
C------D
考虑从A
到D
(A->B->D
)的最长路径。对于具有最佳子结构属性的问题,必须是从A
到B
的最长路径A -> B
,但显然不是因为路径A->C->D->B
更长。可以对从B
到D
的路径进行类似的论证。所以我们可以看到为什么用Dijkstra算法无法解决这个问题。事实上,这个问题是NP
,没有合理的时间复杂度解决方案。
答案 1 :(得分:0)