Dijkstra的算法和负权重和循环

时间:2015-02-18 15:55:52

标签: algorithm graph tree dijkstra

我研究贪心算法。总结了Dijkstra算法的一些重要方面,这些方面都是正确的。我怀疑(4)和(1),有人可以帮助我吗?

I)如果所有边缘权重都是负数,那么Dijkstra算法效果很好。

II)如果在图中我们有一个负循环,Dijkstra进入一个无限循环而永远不会结束。

III)如果图形的一个边具有负权重但没有负周期,则该算法不能很好地工作。

IV)如果图形没有负循环,算法运行良好。

2 个答案:

答案 0 :(得分:5)

Dijkstra's algorithm仅适用于具有非负边的图。这是因为它假设第一次从队列中弹出一个节点,我们找到了到该节点的最短路径,只要你有一个负权重,这就不一定正确。

因此我是假的,II是假的(因为负循环可能不一定是可达的),III是真的,IV是假的(即使没有负循环,它仍然可能有负边缘)。

答案 1 :(得分:0)

如果我没记错的话,Dijkstra的算法(至少是它的经典版本)有一个内置的假设,即图中的所有权重都是非负的。因此,如果我们的图中有负边,我们无法保证它能正常工作。

I)在第一种情况下,我们很可能得到最长的边缘链,其最高权重绝对值作为最短路径,从技术上讲,这将是正确的最短路径。 (我假设图表没有负周期)

II)因为负面循环可能无法到达而错误(如Peter de Rivaz correctly said

III-IV)我假设第3段是关于具有负权重的一个边的图,但是没有负循环。在这种情况下,算法可能会陷入循环,因为它可以找到一个具有负权重边的循环,这似乎是算法中的一个良好的路径延长,因为算法中的某些点我们决定下一步一条边的重量。毫无疑问,消极的一个将永远是第一选择,所以即使是非负循环,我们也有可能无限循环。