Bellman-Ford正确性定理

概述

Bellman-Ford正确性定理(Bellman-Ford Correctness Theorem):Bellman-Ford算法在经过 轮边松弛后,能正确计算从源点到所有其他顶点的单源最短路径,前提是不存在从源点可达的负权回路。

定理陈述

形式化陈述

是带权有向图, 是边权函数, 是源点,

Bellman-Ford正确性定理:若 中不存在从 可达的负权回路,则Bellman-Ford算法在 轮松弛后,对所有

其中 是算法维护的距离估计值, 是从 的最短路径权重。

负权回路检测:若第 轮松弛仍有边可以被松弛,则 中存在从 可达的负权回路。

Bellman-Ford算法

BELLMAN-FORD(G, w, s):
    for each v ∈ V:
        d[v] = +∞
        π[v] = NIL
    d[s] = 0

    for i = 1 to |V| - 1:           // n-1 轮松弛
        for each (u, v) ∈ E:         // 遍历所有边
            if d[v] > d[u] + w(u, v):
                d[v] = d[u] + w(u, v)
                π[v] = u

    for each (u, v) ∈ E:             // 第 n 轮:检测负权回路
        if d[v] > d[u] + w(u, v):
            return FALSE              // 存在负权回路
    return TRUE

证明概要

证明思路(数学归纳法)

证明的核心是归纳法:证明第 轮松弛后, 不超过从 的最多使用 条边的最短路径权重。

引理(松弛引理)

,若在某一时刻对边 执行松弛操作 ,则此后恒有 (距离估计值始终不超过真实最短距离)。

证明:松弛前 (归纳假设),松弛后: 最后一步因为 是从 的某条路径的权重,不小于最短路径权重。

主定理的归纳证明

归纳命题:第 轮松弛完成后(),对所有顶点

记从 的最多使用 条边的最短路径权重为

基础情况(

  • 最多使用1条边的路径只能是单条边 (若存在)或不可达
  • 第1轮松弛遍历所有边,若 ,则
  • 因此 对所有 成立

归纳步骤:假设第 轮后 对所有 成立。

考虑从 的最多 条边的最短路径

  • 最多 条边,则 (由归纳假设)
  • 恰好 条边,设 的倒数第二条边到达 ,则前缀路径从 最多 条边: 由归纳假设,第 轮后 。第 轮松弛边 时:

因此第 轮后 对所有 成立。

最终结论

由于不存在从 可达的负权回路,从 到任意 的最短路径最多 条边(简单路径)。因此:

轮后:

结合松弛引理 ,得

参考资源

关键推论

  • 负权回路检测:第 轮若仍能松弛,则存在从 可达的负权回路。这是因为若不存在负权回路, 轮已足够;第 轮的松弛意味着某条路径可以通过绕行负权回路无限缩短
  • 与Dijkstra算法的对比:Dijkstra算法不能处理负权边,而Bellman-Ford可以。但Bellman-Ford的时间复杂度为 ,比Dijkstra的 (使用斐波那契堆)更慢
  • SPFA优化:Shortest Path Faster Algorithm是Bellman-Ford的队列优化版本,平均情况下更快,但最坏情况仍为
  • 路径重建:通过前驱指针 可以在 时间内重建最短路径

应用场景

在算法导论(CLRS)Ch22单源最短路径中的具体应用:

  1. 网络路由:互联网路由协议(如RIP)使用Bellman-Ford的分布式版本(距离向量算法)计算最短路径
  2. 负权边的处理:当图中存在负权边(如金融网络中的套利检测、某些优化问题中的惩罚代价)时,Bellman-Ford是标准选择
  3. 负权回路检测:在金融领域,Bellman-Ford可用于检测套利机会(负权回路对应可获利的货币兑换循环)
  4. 贪心算法:Dijkstra算法本质上是贪心策略(每次选择最近的未访问顶点),而Bellman-Ford采用动态规划思想(逐轮松弛所有边),两者形成有趣的对比
  5. 约束满足:差分约束系统可以转化为最短路径问题,使用Bellman-Ford求解

参见