Appearance
Network Flow: Correctness and Applications
这一讲接着 Ford-Fulkerson Algorithm 之后,讨论:
- 时间复杂度;
- 正确性,也就是 Max-Flow-Min-Cut Theorem;
- 整数定理 Integrality Theorem;
- 两个典型 application。
Time Complexity
Ford-Fulkerson 的每一轮做三件事:
- 在 residual network
中找一条 - augmenting path ; - 找到这条路径上的 bottleneck capacity;
- 按照 bottleneck 更新 flow 和 residual network。
如果用 DFS/BFS 找路径,那么每一轮的时间复杂度是:
因为找路径、扫描路径、更新 residual network 都可以在线性时间内完成。
如果所有 capacity 都是整数,每一次 augmentation 都会让
因此,在整数 capacity 的情况下:
这个复杂度依赖于
关键点:
Ford-Fulkerson 更准确地说是一个 method,而不是一个固定 algorithm。
不同的 augmenting path 选择方式,会得到不同的实现和复杂度。
例如:
- 任意选择 augmenting path:复杂度可以达到
; - 每次选 residual network 中边数最少的 augmenting path,也就是 Edmonds-Karp Algorithm:
Correctness
Ford-Fulkerson 的正确性依赖于 Max-Flow-Min-Cut Theorem。
Max-Flow-Min-Cut Theorem:最大流的值等于最小割的容量。
这件事可以用两个 lemma 证明:
- 任意 cut 都给出了任意 flow value 的上界;
- Ford-Fulkerson 结束时,可以找到一个刚好等于当前 flow value 的 cut。
两个 lemma 合起来,就说明 Ford-Fulkerson 找到的 flow 已经达到某个 cut 的上界,因此不可能再变大。
Cut and Notation
一个
满足:
cut 的 capacity 是所有从
直观理解:
cut 把 source 和 sink 分开。
如果要从往 送 flow,就一定要穿过这个 cut。
对任意点集
为从
为从
对于 cut
和
flow 的 value 定义为 source 流出的总量:
这里使用标准约定:source 没有流入,即
Generalized Flow Conservation
先证明一个 claim:
对任意 feasible flow
和任意 - cut ,
也就是说,flow value 等于穿过 cut 的净流量。
证明时,把
其中
一方面,由 flow conservation,对于每个中间点
又因为
另一方面,再从边的角度看同一个求和式:
- 如果一条边
满足 ,那么它会在 中贡献 ,又在 中贡献 ,两项 cancel。 - 如果一条边
满足 ,它只贡献 。 - 如果一条边
满足 ,它只贡献 。
所以:
把两边合起来,得到:
Lemma 1: Every Cut Is an Upper Bound
Lemma 1. 对任意 feasible flow
和任意 - cut ,都有
证明:
由上面的 claim,
因为 flow 非负,所以
而
所以:
这说明:
任意 cut 的 capacity 都是任意 flow value 的上界。
因此:
Lemma 2: Ford-Fulkerson Finds a Tight Cut
Lemma 2. 设
是 Ford-Fulkerson 算法输出的 flow。那么存在一个 cut ,使得
证明:
Ford-Fulkerson 停止时,residual network
令
令
因为没有
接下来证明两个 claim。
Claim A.
如果不成立,那么存在一条边
于是它的 residual capacity 为正:
所以 residual network
因此所有从
Claim B.
如果不成立,那么存在一条边
那么 residual network
由于
因此所有从
由 generalized flow conservation:
再代入 Claim A 和 Claim B:
Lemma 2 证毕。
Putting the Two Lemmas Together
现在把两个 lemma 放在一起:
- Lemma 1 说明,对任意 flow
和任意 cut ,都有
- Lemma 2 说明,Ford-Fulkerson 输出的 flow
对某个 cut 满足
所以没有任何 feasible flow
因此 Ford-Fulkerson 输出的
于是:
这就是 Max-Flow-Min-Cut Theorem,也就是 Ford-Fulkerson 正确性的来源。
等价地,对一个 feasible flow
是 maximum flow; - residual network
中不存在 - augmenting path; - 存在一个 cut
,使得 。
How to Find a Minimum Cut
Max-Flow-Min-Cut Theorem 不只证明了 Ford-Fulkerson 的正确性,也给出了一个找 minimum cut 的方法。
给定一个带权有向图:
以及两个点
- 把每条边的 weight 当成 flow network 中的 capacity:
在这个 flow network 上运行 max-flow algorithm,得到一个 maximum flow
。 根据这个 maximum flow 构造 residual network
。 令
为在 中从 可以到达的所有点:
- 令
- 返回 cut
。
为什么这个 cut 一定是 minimum cut?
因为 max-flow 已经结束,所以
由 Lemma 2:
而
所以用 residual network 中从
Integrality Theorem
整数定理是 max-flow 里非常重要的结论。
Integrality Theorem:如果所有 capacity
都是整数,那么一定存在一个 maximum flow ,使得每条边上的 flow 都是整数。
更具体地说,如果 Ford-Fulkerson 从 zero flow 开始,并且所有 capacity 都是整数,那么它找到的每一个 intermediate flow 都是整数 flow。
证明思路:
- 初始时,所有边
,显然是整数; - 如果当前 flow 是整数,那么 residual capacity 也是整数:
或者:
- augmenting path 上的 bottleneck
也是整数;
- 每次更新都是加上或减去整数
,所以更新后的 flow 仍然是整数。
因此,在整数 capacity 的情况下,Ford-Fulkerson 会保持整数性;结合正确性,它最终可以找到一个 integral maximum flow。
关键结论:
只要 capacity 是整数,最大流不仅 value 是整数,而且可以用每条边都是整数的 flow 达到。
这个结论在很多离散问题建模中非常有用,因为它允许我们把“选或者不选”“赢几场比赛”“匹配几个点”这类离散问题转化成 max-flow。
Application 1: Baseball Elimination
问题:有若干支队伍,已知每支队伍已经赢了多少场,以及队伍之间还剩多少场比赛。问某支队伍
考虑下面这个例子:
| Team | Current Wins |
|---|---|
| A | 40 |
| B | 38 |
| C | 37 |
| D | 29 |
假设
所以其他队伍最多还能赢:
| Team | Max Additional Wins |
|---|---|
| A | |
| B | |
| C |
现在只需要安排
Flow Construction
建立一个 flow network:
source
连接到每一个 game node。 比如
和 之间还有 场比赛,就建立一个 node ,并加边:
capacity 是:
- 每个 game node 连接到参与比赛的两支队伍。
capacity 可以设成
每个 team node 连接到 sink
。 对于队伍
,capacity 是它还能额外赢的最多场数:
类似地:
Decision Rule
令:
也就是不包含
如果 max flow 的值等于
因此:
还有机会成为冠军
这个 flow network 的 maximum flow 能 saturate 所有从 source 出发的 game edges。
为什么需要整数定理?
因为比赛结果必须是整数场胜利。max-flow 的 integrality theorem 保证:如果 capacity 是整数,那么存在 integral max flow。这样每个 game node 流向某个 team 的整数 flow 就可以解释成“这几场比赛由这支队伍赢”。
Application 2: Maximum Bipartite Matching
给定一个 bipartite graph:
其中边
目标是找到一个 maximum matching,也就是选择尽可能多的边,并且没有两条被选中的边共享同一个顶点。
Flow Construction
把 bipartite matching 转化成 max-flow:
- 加一个 source
和 sink ; - 对每个
,加边:
capacity 为
- 对每条 bipartite edge
,加边:
capacity 为
- 对每个
,加边:
capacity 为
Why It Works
由于
由于
如果某条中间边
就表示在 matching 中选择边
所以:
integral flow 的 value = matching 的大小。
反过来,任何 matching 也可以构造出同样大小的 flow:
流 ; 流 ; 流 。
因此:
这里再次用到了 integrality theorem:capacity 全是整数,所以 maximum flow 可以取 integral flow,从而能直接对应到 matching。
关键结论:
Maximum Bipartite Matching 可以作为 Maximum Flow 的特例来求解。
Dessert:
A graph is regular if all the vertices have the same degree. A matching is perfect if all the vertices are matched. Prove that a regular bipartite graph always has a perfect