【发布时间】:2014-05-24 07:44:33
【问题描述】:
我知道当有负边权重时 Dijkstra 会失败,但是两种算法什么时候都失败了?
【问题讨论】:
-
什么时候找不到路径?
-
当有负边权重时,Dijkstra 并不总是失败,只是并不总是成功。
我知道当有负边权重时 Dijkstra 会失败,但是两种算法什么时候都失败了?
【问题讨论】:
如果图包含负循环并且该循环可以从源节点到达并且目标节点可以从循环到达,则两种算法都不会找到最短路径。在这种情况下,没有最短路径 - 您可以在循环中执行无限多次迭代,始终减少路径长度。
【讨论】:
如果存在负循环(从源头可达),Bellman-Ford 可以认为是失败的。负循环的主要问题是您可以继续遍历它,从而降低路径成本,因此不存在到某些顶点的有限最短路径(因此 Bellman-Ford 是否真的失败是有争议的 - 它可以检测到这些循环)。
Dijkstra 的算法也会有类似的负循环问题(更不用说处理负边权重的更一般的问题)。
另一种情况可能是顶点不可达,但同样你可以检测到它们不可达。
【讨论】:
由于如果存在负循环,则不存在最短路径,并且 Bellman-Ford 可以检测到负循环,因此您可以说它永远不会失败。 (同样因为你可以检测到两个顶点之间没有路径)
【讨论】: