Floyd-Warshall正确性定理

概述

Floyd-Warshall正确性定理(Floyd-Warshall Correctness Theorem):Floyd-Warshall算法正确计算带权有向图中所有结点对之间的最短路径权重,即使图中存在负权边(但不含负权回路)。

定理陈述

形式化陈述

定理:给定带权有向图 ,其权重函数 不包含负权回路。设 ,对每个顶点对 ,定义 为从顶点 到顶点 的、且只使用顶点集合 中的顶点作为中间顶点的最短路径权重。则 Floyd-Warshall 算法计算出的 等于从 的最短路径权重

递推关系为:

证明概要

证明思路

证明采用三重归纳法(对 进行归纳),核心思想是将”允许使用更多中间顶点”的最短路径分解为子问题。

归纳结构

归纳基础(:当 时,不允许使用任何中间顶点。(若边 存在)或 (若边不存在)。这显然等于从 且不经过中间顶点的最短路径权重。基础成立。

归纳假设:假设对所有顶点对 正确等于只使用 作为中间顶点的最短路径权重。

归纳步骤(:考虑从 且只使用 作为中间顶点的最短路径 。分两种情况:

  1. 不经过顶点 :则 只使用 中的中间顶点,其权重为

  2. 经过顶点 :将 分解为 (其中 表示子路径)。由于 是简单路径(无负权回路保证),子路径 的中间顶点只来自 (否则 会在路径中出现两次),子路径 同理。因此路径权重为

取两种情况的最小值,即得 。归纳成立。

正确性关键观察

  • 路径分解的有效性:最短路径 若经过 ,则 恰好出现一次(因为负权回路不存在,最短路径一定是简单路径),因此分解 是良定义的。
  • 子路径的最优性:由最优子结构性质, 的子路径 本身也是最短路径(使用中间顶点集 )。
  • 归纳终点的完备性 允许使用所有 个顶点作为中间顶点,因此等于无限制的最短路径

算法伪代码

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)

算法使用三重嵌套循环,每层遍历所有 个顶点,总时间复杂度为 。通过原地更新( 覆盖 ),空间复杂度为

参考文献

关键推论

  • 负权边检测:若算法结束后 对某个 成立,则图中存在经过 的负权回路。
  • 路径重构:通过维护前驱矩阵 ,可以在 时间内重构所有最短路径的具体路径。
  • 传递闭包:将权重替换为布尔值(0/1),Floyd-Warshall 可用于计算图的传递闭包,时间
  • 与动态规划的关系:Floyd-Warshall 是动态规划的经典应用,其子问题空间为三维 ,但通过原地更新( 层可覆盖)将空间从 优化到

应用场景

在算法导论中的具体应用:

  1. 所有结点对最短路径(Ch23):Floyd-Warshall 是解决稠密图上所有结点对最短路径问题的标准算法,时间复杂度 ,空间 。适用于 较小或图较稠密的场景。
  2. 传递闭包计算:将 Floyd-Warshall 的 运算替换为逻辑或(OR),加法替换为逻辑与(AND),即可在 时间内计算有向图的传递闭包。
  3. 网络路由:在计算机网络中,Floyd-Warshall 可用于预计算所有路由器对之间的最短路径(距离向量路由协议的理论基础之一)。
  4. 图论中的距离度量:计算有向图的直径(所有结点对最短路径的最大值)。

参见