形式陈述
在有限有向实权最短路 理路 最短路问题 Shortest-path problem 在有限有向实权图中寻找源点到各顶点的最小有向游走成本。 模型中,Floyd–Warshall 同时处理所有有序顶点对。先假设图中没有负权有向圈,给顶点编号 1 , … , n 。令 D ( k ) [ i , j ] 为中间顶点只能来自 { 1 , … , k } 的游走最小成本,不可达时为 + ∞ 。删去重复顶点之间的非负圈不会增加成本,因此有限最小值可由简单路达到;i = j 时可取成本零的空路。递推为
D ( k ) [ i , j ] = min { D ( k − 1 ) [ i , j ] , D ( k − 1 ) [ i , k ] + D ( k − 1 ) [ k , j ] } . 最优简单路要么不含新的内部顶点 k ,要么恰好经过它一次,此时拆出的两段都只用先前允许的内部顶点。初值在对角线上包含空路的成本零,其余位置初始为 + ∞ ,再对每条弧取直接权重的最小值。这样也适用于平行弧和自环:反向弧占不同单元,负自环不会被对角线的零覆盖。
按 k 外层原地更新即可。无负圈时 D [ k , k ] = 0 ,本轮的第 k 行与列不会改变,因此原地读到的两个操作数仍符合上一阶段的递推。精确加法、比较和矩阵访问均为常数成本时,若输入已有各点对最小弧权的矩阵,n ≥ 1 的时间为 Θ ( n 3 ) ;若输入是 m 条可含平行弧的记录,还须扫描它们构造初始矩阵,总时间为 Θ ( m + n 3 ) 。距离矩阵占 Θ ( n 2 ) 空间;空图直接返回空矩阵。实现以可达标记处理 + ∞ ,避免机器哨兵相加溢出。
负圈检测使用同一有限矩阵更新,但上述“受限游走最小值”解释此时不再成立:可反复绕负圈的游走成本没有有限下界。更新中的每个有限值仍有实际游走见证,最终存在 D [ k , k ] < 0 当且仅当图中存在负圈。负对角元给出负闭合游走;反过来,一条简单负圈可按其内部顶点的阶段被递推拼接出来。
若要输出扩展实数距离,先保存更新结束时的可达标记 R [ i , j ] ≡ D [ i , j ] < + ∞ 及负对角元集合 K 。对每个点对,若存在 k ∈ K 使 R [ i , k ] 与 R [ k , j ] 均为真,就标记 δ ( i , j ) = − ∞ ;其余点对保留有限距离或 + ∞ 。标记成本仍为 O ( n 3 ) ,应使用保存的布尔可达关系,而不对新写入的正、负无穷做普通加法。
直觉
Floyd–Warshall 依次允许更多顶点作为路径内部节点。无负圈时,第 k 轮后,d [ i ] [ j ] 表示只使用前 k 个允许中间点的最短距离;选取最优简单路后,它要么不经过新开放的 k ,要么在唯一一次经过 k 处拆成 i ⇝ k 与 k ⇝ j 两段。这个状态定义解释了为何三层循环中 k 必须在最外层。
图片加载失败 Floyd–Warshall 的矩阵动态规划更新
例子与边界
设 d [ 1 , 2 ] = 3 、d [ 2 , 3 ] = − 1 、d [ 1 , 3 ] = 5 。开放顶点 2 作为中间点后,递推把 d [ 1 , 3 ] 更新为 2 ;这里虽有负边却没有负圈,最优值可在有限条允许的简单路中取得。即使没有负圈,零权圈也可能产生无限多条等成本游走,因此不能靠“游走条数有限”来证明递推。若另有 3 → 2 权 − 2 ,则 2 → 3 → 2 为负圈,所有能到达该圈且还能从圈到达的点对都应标为 − ∞ 。
循环顺序必须让 k 在最外层;随意交换三重循环会混入尚未开放的中间点,破坏状态不变量。要恢复具体有向路,可维护 next 或 predecessor 矩阵。存在相关负圈时,仅返回更新结束后的有限数值会误导,必须按可达条件传播 − ∞ 或单独报告受影响点对。
推论与应用
Floyd–Warshall 是以允许的中间顶点集合为阶段的动态规划 理路 动态规划 Dynamic programming 在有限或良基的状态依赖上复用已计算结果的算法设计范式。 。当输入用稠密矩阵表示,或确实需要全部 n 2 个点对答案时,固定的 O ( n 3 ) 扫描常比逐源稀疏算法更合适;“稠密”是表示与复杂度条件,不改变输入的有向实权模型。布尔半环上同一递推得到传递闭包,替换代数运算还可计算最宽路等代数路径问题。
当图稀疏且无负环时,Johnson 算法 理路 Johnson 全源最短路算法 Johnson's algorithm · Johnson all-pairs shortest paths 以 Bellman–Ford 势函数把无负环图重赋为非负边权,再重复 Dijkstra 求稀疏图全源最短路。 以势函数重赋权后从每点运行 Dijkstra,时间随 m 而非固定 n 3 ;它与 Floyd–Warshall 的稠密矩阵 DP 是不同成本区域。布尔可达或小整数状态的某些矩阵转移可由四俄罗斯/字级并行 理路 四俄罗斯方法与字级并行 Four Russians method · bit parallelism · broadword programming 把状态切成可查表微块,或在一个机器字内并行处理多位,从而省去对数因子。 分块加速,但必须说明字长和有限块类型,不能把普通实权 min-plus 更新无条件压成位运算。
距离积的倍增归约 理路 APSP与距离积的细粒度等价 APSP min-plus equivalence · APSP与最小加乘积等价 · Distance product and APSP 由三层有向图和距离矩阵倍增建立APSP与min-plus乘积的双向时间传递,明确整数位长、负环与输出边界。 改以允许弧数1、2、4、…为阶段,给出另一种连接APSP与矩阵计算的方式;反向三层图可直接由本页算法求值。该等价说明速度怎样传递,不把某个时代的APSP困难性假设作为其证明前提。
参考资料
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms , 4th ed., MIT Press, 2022,§23.2, the Floyd–Warshall algorithm。
Robert W. Floyd, “Algorithm 97: Shortest Path,” Communications of the ACM 5(6), 1962, p. 345。