相关笔记
概览
本节系统证明单源最短路径问题中的五个基础引理,这些引理构成了所有最短路径算法(Bellman-Ford、Dijkstra、DAG 最短路径等)正确性的理论基础。核心引理包括:三角不等式(Triangle Inequality)、上界性质(Upper-Bound Property)、收敛性质(Convergence Property)、路径松弛性质(Path-Relaxation Property)和前驱子图性质(Predecessor-Subgraph Property)。
要点列表:
- 三角不等式是最短路径的基本性质,所有最短路径算法都依赖它
- 上界性质保证松弛操作只会使估计值单调递减
- 收敛性质说明一旦某顶点估计值达到最优,将永远保持
- 路径松弛性质是 Bellman-Ford 和 DAG 最短路径算法正确性的核心
- 前驱子图性质保证最终的前驱子图构成一棵最短路径树
知识结构总览
flowchart TD A["22.5 最短路径性质的证明"] --> B["三角不等式"] A --> C["上界性质"] A --> D["收敛性质"] A --> E["路径松弛性质"] A --> F["前驱子图性质"] B --> B1["δ(s,v) ≤ δ(s,u) + w(u,v)"] B --> B2["反证法证明"] B --> B3["所有算法的基础"] C --> C1["d[v] ≥ δ(s,v)"] C --> C2["前提: 无负权环"] C --> C3["对松弛次数归纳"] D --> D1["s⇝u→v 是最短路径"] D --> D2["d[u]=δ(s,u) ⟹ d[v]=δ(s,v)"] D --> D3["上界 + 松弛"] E --> E1["最短路径边按序松弛"] E --> E2["d[v_k] = δ(s, v_k)"] E --> E3["对路径长度归纳"] F --> F1["G_π 是最短路径树"] F --> F2["收敛 + 路径松弛"] F --> F3["唯一源点、无环、连通"] B --> D C --> D D --> E E --> F
核心思想
核心思路
本节的五个引理形成了一条严密的逻辑链:三角不等式是最短路径的基本数学性质;上界性质保证松弛操作的正确方向(只会逼近而不会越过最优值);收敛性质说明松弛操作能”锁定”最优值;路径松弛性质将单条边的松弛效果推广到整条路径;前驱子图性质最终保证算法输出的前驱关系构成一棵合法的最短路径树。理解这条逻辑链是掌握所有最短路径算法正确性证明的关键。
2.1 松弛操作回顾
在开始证明之前,先回顾松弛操作的定义。
松弛操作(Relaxation)
给定有向边 和权函数 ,松弛操作如下:
松弛操作的直觉:如果从源点经 到 的路径比当前已知的到 的路径更短,则更新 的最短路径估计值。
初始化操作(INITIALIZE-SINGLE-SOURCE)
2.2 引理 22.1——三角不等式(Triangle Inequality)
引理 22.1(三角不等式 / Triangle Inequality)
设 是一个带权有向图,权函数为 ,源点为 。则对所有边 ,有:
其中 表示从 到 的最短路径权值。
证明
【反证:假设 ,拼接路径 和边 得更短路径,矛盾】 用反证法。
假设存在某条边 使得 。
由 的定义,存在一条从 到 的路径 ,其权值为 。将边 拼接到路径 的末尾,得到一条从 到 的路径 ,其权值为:
由假设 ,即 。
这与 是从 到 的最短路径权值的定义矛盾(我们找到了一条比”最短”更短的路径)。
因此假设不成立,对所有 ,有 。
直觉理解: 三角不等式说的是”直达不一定比绕路短”。从 到 的最短路径不可能比”先到 再走边 “更长,因为后者本身就是一条从 到 的路径,而最短路径是所有路径中最短的。
2.3 引理 22.2——上界性质(Upper-Bound Property)
引理 22.2(上界性质 / Upper-Bound Property)
设 是一个带权有向图,权函数为 ,源点为 。假设 中没有从 可达的负权环。在执行 INITIALIZE-SINGLE-SOURCE 之后,对任意顶点 , 始终满足:
并且该不等式在任意序列的松弛操作下都保持不变。
证明
【对松弛次数归纳:归纳基础(初始化 , )】 对松弛操作的次数进行归纳。
归纳基础: 初始化之后,(源点到自身的最短路径权值为 0),对所有 ,(因为 是有限值或 ,而 大于任何有限值)。归纳基础成立。
归纳假设: 假设在第 次松弛操作之前,对所有 ,。
【归纳步骤:松弛 后 (三角不等式)】 归纳步骤: 考虑第 次松弛操作,设松弛的边为 。
松弛操作只在 时才修改 ,将其更新为 。我们需要证明更新后的值仍然满足上界性质。
由归纳假设,。因此:
由引理 22.1(三角不等式),。因此:
所以更新后的 ,上界性质仍然成立。
对于未被松弛的顶点, 值不变,由归纳假设仍然满足上界性质。
由数学归纳法,上界性质在任意序列的松弛操作下始终成立。
关键前提: 上界性质要求图中没有从 可达的负权环。如果存在负权环, 可能是 ,此时 虽然成立但无实际意义。
2.4 引理 22.3——收敛性质(Convergence Property)
引理 22.3(收敛性质 / Convergence Property)
设 是一个带权有向图,权函数为 ,源点为 。假设 中没有从 可达的负权环。设 是一条从 到 的最短路径(即 是从 到 的最短路径, 是最后一条边)。如果在某次松弛操作之后 ,且此后对边 执行了松弛操作,则此后永远有 。
证明
【,,故 (上界性质),松弛条件成立】 已知 是最短路径,因此:
在对边 执行松弛操作时,检查松弛条件:
由上界性质(引理 22.2),。因此 与 结合,得 。
这意味着松弛条件 成立(因为 ),所以松弛操作会执行,将 更新为:
【 已达最小值 ,由上界性质不可能再被减小,永久锁定】 此后,。由上界性质, 不可能被进一步减小(因为 已经等于最小值 )。因此此后永远有 。
直觉理解: 收敛性质说的是,如果某个顶点 已经”找到了最优值”,那么从 出发的边 一旦被松弛, 也会”锁定”其最优值。这是 Dijkstra 算法正确性的核心——Dijkstra 每次选取 值最小的顶点,该顶点的 值一定等于 ,然后松弛其出边,使邻居收敛。
2.5 引理 22.4——路径松弛性质(Path-Relaxation Property)
引理 22.4(路径松弛性质 / Path-Relaxation Property)
设 是从源点 到 的一条最短路径。如果对 上的边按照顺序 进行松弛,则在松弛完最后一条边 之后,有 。并且,即使在这之前对其他边进行了松弛,此性质仍然成立。
证明
【对路径长度 归纳:基础 时 】 对路径 的长度 (即边数)进行归纳。
归纳基础: ,即 。此时 ,。初始化后 ,归纳基础成立。
归纳假设: 设当最短路径长度为 时性质成立。即如果 是从 到 的最短路径,按序松弛后 。
【归纳步骤:前缀是最短路径(子路径性质),由归纳假设 ,再由收敛性质得 】 归纳步骤: 考虑最短路径 。
由于 是最短路径,其前缀 也是从 到 的最短路径(最短路径的子路径也是最短路径)。
由归纳假设,在按序松弛完边 之后,。
现在对边 执行松弛。由引理 22.3(收敛性质),由于 ,且 是最短路径,松弛后 。
由数学归纳法,路径松弛性质对所有 成立。
重要说明: 路径松弛性质的关键在于”即使在这之前对其他边进行了松弛,此性质仍然成立”。这是因为:
- 上界性质保证 始终成立
- 收敛性质保证一旦 ,松弛 后 就会”锁定”为
- 其他边的松弛不会影响 被锁定后的值(因为 已经等于最小值,不可能再被减小)
2.6 引理 22.5——前驱子图性质(Predecessor-Subgraph Property)
引理 22.5(前驱子图性质 / Predecessor-Subgraph Property)
设 是一个带权有向图,权函数为 ,源点为 。假设 中没有从 可达的负权环。设在算法执行过程中的某个时刻,对所有顶点 ,都有 。则此时的前驱子图 是一棵以 为根的最短路径树(shortest-paths tree)。
其中:
证明
我们需要证明 满足最短路径树的三个条件:
- 是一棵以 为根的有根树
- 对所有 , 中从 到 的唯一简单路径是一条从 到 的最短路径
【第一步:追踪前驱链 必到达 (无负权环 链有限)】 第一步:证明 中从 到每个 存在路径。
对 ,反复追踪前驱:。由于 中没有从 可达的负权环,且 是有限值,这条追踪链不可能无限延伸(否则会形成环,而环上的 值之和会导致矛盾)。因此追踪链最终到达 ,说明 中从 到 存在路径。
第二步:证明 中没有环。
【反证:假设存在环 ,求和得 ,但松弛条件 在 时不成立,矛盾】 用反证法。假设 中存在环 ,其中每条边 。
不失一般性,设 是环上 值最小的顶点。由于 ,有 。由松弛操作的规则, 意味着在某个时刻 被更新为 。
由于 且 (由已知条件),有:
类似地,对环上每条边 ,有:
将环上所有等式相加:
左边和右边都包含 (只是排列顺序不同),因此:
即环的权值为 。
但由于 是环上 值最小的顶点,而 ,如果 ,则 ,这与 是最小值矛盾。因此 。
类似地,环上所有边权为 。但 ,这要求 。由于 是最小值且 ,确实 。
这意味着环上所有顶点的 值相等。但松弛操作要求 ,即 。类似地所有边权为 。
然而,如果所有边权为 ,则环上的 值全部相等,这意味着环上的每个顶点都有相同的最短路径权值。但松弛操作只在 时才更新 和 。如果 ,则松弛条件 不成立, 不会被设为 ,矛盾。
因此 中不可能存在环。
第三步:证明 中从 到 的路径是最短路径。
【沿前驱路径逐步展开 ,求和得 】 设 中从 到 的路径为 ,其中每条边 。
由 的定义, 在某个时刻被设为 。由于 且 ,有:
逐步展开:
因此 中从 到 的路径权值恰好等于 ,即该路径是最短路径。
综上, 是一棵以 为根的最短路径树。
2.7 五个引理的逻辑关系总结
引理间的逻辑依赖关系
五个引理构成了如下逻辑链:
- 三角不等式(Lemma 22.1):独立成立,是最短路径的基本数学性质
- 上界性质(Lemma 22.2):依赖三角不等式,保证
- 收敛性质(Lemma 22.3):依赖上界性质,保证松弛操作能”锁定”最优值
- 路径松弛性质(Lemma 22.4):依赖收敛性质,将单边松弛推广到路径松弛
- 前驱子图性质(Lemma 22.5):依赖上界性质和路径松弛性质,保证最终输出是最短路径树
各算法的依赖关系:
- 22.1 Bellman-Ford算法:主要依赖路径松弛性质( 轮松弛覆盖所有可能的路径长度)
- 22.3 Dijkstra算法:主要依赖收敛性质(每次选取 值最小的顶点,保证其已收敛)
- 22.2 有向无环图中的单源最短路径:主要依赖路径松弛性质(按拓扑序松弛保证边的松弛顺序正确)
- 22.4 差分约束与最短路径:依赖三角不等式(保证最短路径值满足差分约束)
补充理解与拓展
补充1:三角不等式的几何直觉
三角不等式 与欧几里得几何中的三角不等式完全类似:在三角形中,任意一边的长度不超过另外两边长度之和。在图论中,“边”的长度就是路径权值,“三角形”由路径 、边 和路径 构成。
这个性质在日常生活中也很常见:从北京到上海的直飞航班价格不太可能比”先飞到广州再飞到上海”更贵(虽然实际中可能有特殊情况,但在最短路径的模型中,三角不等式始终成立)。
来源:CLRS Chapter 24.5; Kleinberg, T. & Tardos, E. (2005). Algorithm Design, Pearson
补充2:负权环与 的关系
当图中存在从源点 可达的负权环时, 可能取值为 。具体来说,如果从 到 的某条路径上经过了负权环,那么可以无限次绕行该负权环,使路径权值趋近于 。
这就是为什么 Bellman-Ford 算法需要检测负权环:如果存在负权环,最短路径问题本身就没有有意义的有限解。在差分约束系统(22.4 差分约束与最短路径)中,负权环对应系统无可行解。
值得注意的是,上界性质(Lemma 22.2)的前提条件就是”没有从 可达的负权环”。如果存在负权环, 可能会在松弛过程中不断减小,永远不会”收敛”到 。
来源:CLRS Chapter 24.5
补充3:松弛操作的"贪心"本质
松弛操作本质上是一种贪心策略:每次都尝试用经过当前边的路径来改进目标顶点的估计值。五个引理共同保证了这种贪心策略的正确性:
- 上界性质保证贪心不会”过头”( 不会小于 )
- 收敛性质保证贪心最终会”到位”( 会达到 )
- 路径松弛性质保证按正确顺序贪心可以处理整条路径
- 前驱子图性质保证贪心的最终结果构成一棵合法的树
这种”贪心 + 严格证明”的模式在算法设计中非常常见,与 第15章_贪心算法-章节汇总 中的思想一脉相承。
来源:CLRS Chapter 24.5
易混淆点与辨析
误区:三角不等式与松弛条件是一回事
❌ 错误理解: “三角不等式 和松弛条件 本质上是一样的”
✅ 正确理解: 两者有关联但完全不同:
- 三角不等式描述的是真实最短路径权值 之间的关系,是一个数学事实,对任何图都成立
- 松弛条件描述的是当前估计值 之间的关系,是一个算法操作,只有当条件成立时才执行更新
联系: 三角不等式是证明上界性质的关键工具,而上界性质保证了松弛操作的正确方向。三角不等式告诉我们”最优值应该满足什么关系”,松弛条件告诉我们”当前估计值是否需要更新”。
误区:上界性质不需要前提条件
❌ 错误理解: “上界性质 对任何图都成立”
✅ 正确理解: 上界性质的前提条件是”图中没有从 可达的负权环”。如果存在负权环:
- 可能是
- 在松弛过程中可能不断减小
- 虽然 在数学上仍然成立,但这没有实际意义
关键区别: 当存在负权环时, 不会收敛到一个有限值,Bellman-Ford 算法会检测到这种情况并报告”存在负权环”。
误区:前驱子图与 BFS 树是同一个概念
❌ 错误理解: “前驱子图 和 BFS 树是一样的,都是遍历树”
✅ 正确理解: 前驱子图和 BFS 树有本质区别:
- BFS 树(20.2 广度优先搜索)是在无权图(或所有边权相同的图)中,按层序探索得到的树,保证从源点到每个顶点的边数最少
- 前驱子图 是在带权图中,由松弛操作产生的 指针构成的子图,保证从源点到每个顶点的路径权值最小
联系: 在无权图(所有边权为 1)中,BFS 树就是最短路径树的一个特例。BFS 可以看作是 Dijkstra 算法在所有边权相等时的特殊情况。
误区:路径松弛性质要求"恰好按序松弛"
❌ 错误理解: “路径松弛性质要求只按最短路径的边的顺序松弛,不能松弛其他边”
✅ 正确理解: 路径松弛性质的表述是”如果对 上的边按照顺序进行松弛”,这并不意味着不能松弛其他边。关键在于:
- 在按序松弛 上的边之前,可以任意松弛其他边
- 上界性质保证了其他边的松弛不会破坏 的正确性
- 只要 上的边最终被按序松弛, 就会收敛到
实际应用: Bellman-Ford 算法松弛所有边 次,这自然包含了按序松弛任何最短路径上所有边的可能性(因为任何最短路径最多有 条边)。
习题精选
| 题号 | 题目描述 | 难度 | 来源 |
|---|---|---|---|
| 22.5-1 | 给出图 24.2 的另外两棵最短路径树 | ⭐ | CLRS |
| 22.5-2 | 构造图使得每条边在某棵最短路径树中且不在另一棵中 | ⭐⭐ | CLRS |
| 22.5-3 | 扩展引理 22.1 的证明以处理 和 | ⭐⭐ | CLRS |
| 22.5-4 | 证明若 被设为非 NIL 值则存在负权环 | ⭐⭐⭐ | CLRS |
题1(22.5-1):给出另外两棵最短路径树
题目
给出图 24.2(第 648 页)的有向图的两棵最短路径树,要求不同于图中已经展示的两棵。
解答
考虑图 24.2 中的有向图(5 个顶点 ),源点为 。
该图中,从 出发的最短路径情况如下:
- (路径 或 )
- (路径 或 )
- (路径 或 或 )
- (路径 或 或 或 )
图中已展示的两棵最短路径树为:
- 边集
- 边集
另外两棵最短路径树为: 3. 边集 4. 边集
验证第 3 棵树:
- : ✓
- : ✓
- : ✓
- : ✓
验证第 4 棵树:
- : ✓
- : ✓
- : ✓
- : ✓
来源:walkccc.me/CLRS/Chap24/24.5/
题2(22.5-2):每条边在不同最短路径树中的状态
题目
给出一个带权有向图 ,权函数 ,以及源点 ,使得 满足以下性质:对每条边 ,存在一棵包含 的最短路径树,也存在一棵不包含 的最短路径树。
解答
构造:
设 有 3 个顶点 、、,以及 3 条边:
- ,权为 1
- ,权为 1
- ,权为 0
最短路径权值:
- (路径 )
- (路径 或 )
可能的最短路径树(2 个顶点的树需要 2 条边):
- : ✓, ✓
- : ✓, ✓
- :但 不可达,不是生成树
注意,第 3 棵不是生成树( 不可达)。实际上只有两棵合法的最短路径树。但题目要求 3 条边每条都有”在某棵中”和”不在某棵中”的情况。
重新考虑:3 棵可能的最短路径树为:
- :包含 和 ,不包含
- :包含 和 ,不包含
- : 不可达,不是合法的最短路径树
注意到 在树 1 中但不在树 2 中, 在树 2 中但不在树 1 中。但 在两棵树中都在。
要使 也在某棵树中不在另一棵树中,需要更多的顶点和边。一个满足条件的更复杂的图可以构造出来,但核心思想是:当存在多条等权最短路径时,每条边都有可能被选入或不被选入某棵最短路径树。
来源:walkccc.me/CLRS/Chap24/24.5/
题3(22.5-3):处理 和 的三角不等式
题目
扩展引理 22.1(三角不等式)的证明,使其能处理最短路径权值为 或 的情况。
解答
扩展后的引理: 对所有边 ,,即使 或 为 或 。
【分情况讨论:、、 有限】 扩展的算术规则:
分情况讨论:
情况1: 。则 ,而 恒成立。
情况2: 。则 。由于从 到 的路径经过负权环,从 到 再到 的路径也经过该负权环,因此 。于是 ,成立。
情况3: 为有限值。
- 若 : 恒成立(因为右边为有限值)。
- 若 : 恒成立。
- 若 为有限值:退化为原始引理 22.1 的证明。
综上,扩展后的三角不等式在所有情况下都成立。
来源:walkccc.me/CLRS/Chap24/24.5/
题4(22.5-4): 被设为非 NIL 值意味着负权环
题目
设 是一个带权有向图,源点为 。在执行 INITIALIZE-SINGLE-SOURCE 之后,如果某次松弛操作将 设为非 NIL 值,证明 中包含负权环。
解答
证明:
【,若 RELAX 触发则 ,即 】 初始化后 。要使 被设为非 NIL 值,必须存在某条边 ,使得松弛操作 RELAX 满足条件:
初始化后 ,所以条件变为:
由上界性质(引理 22.2),。因此:
这说明 是有限值(因为 是有限值,上界性质成立意味着没有负权环——但我们正在证明的就是存在负权环,所以需要更仔细的分析)。
更直接的证明: 意味着 。由于 在初始化后为 ,且松弛操作只会使 值减小或不变(由上界性质), 在被松弛到当前值之前一定经过了一系列松弛操作,使得 从 逐步减小。
【路径 加边 形成环 ,,故存在负权环】 考虑从 到 的路径(由 指针追踪得到)。由于 被更新为某个有限值,说明存在一条从 到 的路径 。现在考虑路径 加上边 ,形成一个环 。该环的权值为:
(因为 在最后一次被更新时等于 ,而 。)
因此 中存在一个负权环。
来源:walkccc.me/CLRS/Chap24/24.5/
解题思路提示
最短路径性质证明题的解题方法论:
- 三角不等式:几乎总是用反证法——假设不等式不成立,构造一条更短的路径导致矛盾
- 上界性质:用数学归纳法,对松弛次数归纳,归纳步骤中利用三角不等式
- 收敛性质:结合上界性质和三角不等式,证明松弛条件必然被触发
- 路径松弛性质:对路径长度(边数)进行归纳,归纳步骤中利用收敛性质
- 前驱子图性质:分别证明无环性、连通性和最短路径性,无环性通常用反证法
视频学习指南
| 资源 | 主题 | 链接 | 说明 |
|---|---|---|---|
| MIT 6.006 Lecture 16 | Dijkstra’s Algorithm | 链接 | 包含收敛性质的直觉讲解 |
| MIT 6.006 Lecture 17 | Bellman-Ford | 链接 | 包含路径松弛性质的讲解 |
| Abdul Bari | Bellman-Ford Algorithm | 链接 | 逐步演示与负权环检测 |
| WilliamFiset | Shortest Path Properties | 链接 | 最短路径基础性质总结 |
教材原文
CLRS 第4版 22.5节——三角不等式
For any edge , we have . This inequality is known as the triangle inequality.
CLRS 第4版 22.5节——上界性质
For all vertices , we have at all times, and this invariant is maintained over any sequence of relaxation operations on the edges of . Moreover, once achieves the value , it never changes.
CLRS 第4版 22.5节——收敛性质
If is a shortest path in for some , and if at any time prior to relaxing edge , then at all times afterward.
CLRS 第4版 22.5节——路径松弛性质
Let be a shortest path from to . If the edges of are relaxed in the order , then after all these relaxations. This property holds regardless of any other relaxation steps that may occur, even if they are intermixed with relaxations of the edges of .
CLRS 第4版 22.5节——前驱子图性质
Once for all , the predecessor subgraph is a shortest-paths tree rooted at .
参见Wiki
- 22.1 Bellman-Ford算法 — Bellman-Ford 算法的详细描述,依赖路径松弛性质
- 22.2 有向无环图中的单源最短路径 — DAG 最短路径算法,依赖路径松弛性质与拓扑序
- 22.3 Dijkstra算法 — Dijkstra 算法的详细描述,依赖收敛性质与贪心选取
- 22.4 差分约束与最短路径 — 差分约束系统,依赖三角不等式
- 第20章_基本图算法-章节汇总 — BFS 与 DFS,前驱子图与 BFS 树的对比