Floyd-Warshall正确性定理
概述
Floyd-Warshall正确性定理(Floyd-Warshall Correctness Theorem):Floyd-Warshall算法正确计算带权有向图中所有结点对之间的最短路径权重,即使图中存在负权边(但不含负权回路)。
定理陈述
形式化陈述
定理:给定带权有向图 ,其权重函数 不包含负权回路。设 ,对每个顶点对 ,定义 为从顶点 到顶点 的、且只使用顶点集合 中的顶点作为中间顶点的最短路径权重。则 Floyd-Warshall 算法计算出的 等于从 到 的最短路径权重 。
递推关系为:
证明概要
证明思路
证明采用三重归纳法(对 进行归纳),核心思想是将”允许使用更多中间顶点”的最短路径分解为子问题。
归纳结构
归纳基础():当 时,不允许使用任何中间顶点。(若边 存在)或 (若边不存在)。这显然等于从 到 且不经过中间顶点的最短路径权重。基础成立。
归纳假设:假设对所有顶点对 , 正确等于只使用 作为中间顶点的最短路径权重。
归纳步骤():考虑从 到 且只使用 作为中间顶点的最短路径 。分两种情况:
-
不经过顶点 :则 只使用 中的中间顶点,其权重为 。
-
经过顶点 :将 分解为 (其中 表示子路径)。由于 是简单路径(无负权回路保证),子路径 的中间顶点只来自 (否则 会在路径中出现两次),子路径 同理。因此路径权重为 。
取两种情况的最小值,即得 。归纳成立。
正确性关键观察
- 路径分解的有效性:最短路径 若经过 ,则 恰好出现一次(因为负权回路不存在,最短路径一定是简单路径),因此分解 是良定义的。
- 子路径的最优性:由最优子结构性质, 的子路径 和 本身也是最短路径(使用中间顶点集 )。
- 归纳终点的完备性: 允许使用所有 个顶点作为中间顶点,因此等于无限制的最短路径 。
算法伪代码
FLOYD-WARSHALL(W)
1 n ← W.rows
2 D^(0) ← W
3 for k ← 1 to n
4 for i ← 1 to n
5 for j ← 1 to n
6 d_{ij}^{(k)} ← min(d_{ij}^{(k-1)}, d_{ik}^{(k-1)} + d_{kj}^{(k-1)})
7 return D^(n)
算法使用三重嵌套循环,每层遍历所有 个顶点,总时间复杂度为 。通过原地更新( 覆盖 ),空间复杂度为 。
参考文献:
- CLRS 第4版,第23.2节 “All-pairs shortest paths”
- Stanford CS161 Lecture Notes: https://stanford-cs161.github.io/winter2026/assets/files/lecture12-notes.pdf
- UMD CMSC451 Notes: http://www.cs.umd.edu/class/spring2017/cmsc451/fw.pdf
关键推论
- 负权边检测:若算法结束后 对某个 成立,则图中存在经过 的负权回路。
- 路径重构:通过维护前驱矩阵 ,可以在 时间内重构所有最短路径的具体路径。
- 传递闭包:将权重替换为布尔值(0/1),Floyd-Warshall 可用于计算图的传递闭包,时间 。
- 与动态规划的关系:Floyd-Warshall 是动态规划的经典应用,其子问题空间为三维 ,但通过原地更新( 层可覆盖)将空间从 优化到 。
应用场景
在算法导论中的具体应用:
- 所有结点对最短路径(Ch23):Floyd-Warshall 是解决稠密图上所有结点对最短路径问题的标准算法,时间复杂度 ,空间 。适用于 较小或图较稠密的场景。
- 传递闭包计算:将 Floyd-Warshall 的 运算替换为逻辑或(OR),加法替换为逻辑与(AND),即可在 时间内计算有向图的传递闭包。
- 网络路由:在计算机网络中,Floyd-Warshall 可用于预计算所有路由器对之间的最短路径(距离向量路由协议的理论基础之一)。
- 图论中的距离度量:计算有向图的直径(所有结点对最短路径的最大值)。