为什么所有对最短路径算法都适用于负权重?

时间:2014-04-06 08:00:10

标签: algorithm graph shortest-path

我最近一直在研究所有对最短路径算法,例如Floyd-Warshall和Johnson的算法,我注意到即使图表包含负权重,这些算法也会产生正确的解决方案边缘(但不是负重量周期)。为了比较,Dijkstra的算法(它是单源最短路径)不适用于负权重边缘。是什么让全对最短路径算法与负权重一起工作?

2 个答案:

答案 0 :(得分:5)

Floyd Warshall的所有对最短路径算法适用于具有负边缘权重的图形,因为算法的正确性不依赖于边缘权重是非负的,而Dijkstra的正确性是正确的。 s算法基于这个事实。

Dijkstra算法的正确性:

我们在算法的任何步骤都有2组顶点。集合A由我们计算最短路径的顶点组成。集B由剩余的顶点组成。

归纳假设:在每一步我们都会假设所有先前的迭代都是正确的。

归纳步骤:当我们将一个顶点V添加到集合A并将距离设置为dist [V]时,我们必须证明该距离是最佳的。如果这不是最优的,则必须有一些到顶点V的其他路径,其长度较短。

假设这个其他路径经过集合B中的某个顶点X

现在,从dist[V] <= dist[X]起,因此除了图形具有负边长之外,到V的任何其他路径都将是至少dist [V]长度。

Floyd Warshall算法的正确性 从顶点S到顶点T的任何路径都将穿过图形的任何其他顶点U.因此,从S到T的最短路径可以计算为

  对于图中的所有顶点U,

min(shortest_path(S到U)+ shortest_path(U到T))。

正如您所看到的,只要子调用正确计算路径,就不会将图形的边缘依赖于非负值。只要基本案例已正确初始化,子调用就会正确计算路径。

答案 1 :(得分:0)

Dijkstra算法不适用于负权重边缘,因为它基于贪婪策略(假设),一旦顶点v被添加到集合S,d [v]包含最小值距离可能。

但是如果Q中的最后一个顶点被添加到S并且它有一些输出的负权重边。由负边缘引起的对距离的影响不会被计算。

但是,所有对最短路径算法都会捕获这些更新。