Dijkstra图中最长的路径

时间:2018-06-13 20:50:40

标签: graph graph-theory graph-algorithm dijkstra longest-path

我只是想知道:你可以在图表中反转所有权重,然后做一个Dijkstra吗?当我们最小化权重的倒数值时,获得的路径将最大化它,对吧? 因此,通过这种方式,我们可以使用Dijkstra获得图表中最长的路径! 这似乎太容易了,我错了吗?拜托,赐教。

2 个答案:

答案 0 :(得分:0)

这是不可能的,因为longest path problem没有像shortest path那样的最佳子结构问题。

假设您可以将任何路径视为最长路径(因此它可以具有循环)但是如果存在循环并且权重为正,则算法将永远不会结束,因为它总是可以通过循环遍历来改善最长路径。

现在说我们想要只有简单的路径(没有循环)作为最长路径的候选路径。在不失一般性的情况下,考虑以下具有所有边的单位权重的图:

A------B
|      |
|      |
C------D

考虑从ADA->B->D)的最长路径。对于具有最佳子结构属性的问题,必须是从AB的最长路径A -> B,但显然不是因为路径A->C->D->B更长。可以对从BD的路径进行类似的论证。所以我们可以看到为什么用Dijkstra算法无法解决这个问题。事实上,这个问题是NP,没有合理的时间复杂度解决方案。

答案 1 :(得分:0)

使用简单的示例图很容易理解。

enter image description here

假设您要从A点到D点。要使权重的倒数最小,您将经过C。但是A-> B-> D较大。

编辑:也许我至少应该包括一些数学知识。

假设一个正数序列的总和是s。

a1 + a2 + a3 + ... + an = s

倒数和的最小值是多少?

1/a1 + 1/a2 + 1/a3 + ... + 1/an

玩这个游戏会给你一些直觉。