Appearance
Hall's Theorem and Network Flow Running Time
这一讲接着 maximum bipartite matching 和 Ford-Fulkerson method,讨论:
- Hall's Marriage Theorem;
- 如何用 Max-Flow-Min-Cut Theorem 证明 Hall's Theorem;
- 为什么 regular bipartite graph 一定有 perfect matching;
- Edmonds-Karp Algorithm 的运行时间;
- Dinic's Algorithm 的 high-level idea;
- Hopcroft-Karp-Karzanov Algorithm for maximum bipartite matching。
Hall's Marriage Theorem
考虑一个 bipartite graph:
其中
对任意子集
也就是说,
Hall's Marriage Theorem:存在一个 matching 能够匹配
中所有点,当且仅当对任意 ,都有
这里“匹配
直观理解:
如果
中某一批点 只能连到更少的点 ,即 ,那么这批点不可能全部被匹配。
这就是 Hall condition。
Proof: Necessity
先证明比较直观的方向:
假设存在一个 matching,可以匹配
任取
这些被匹配到的点一定都在
所以 Hall condition 必须成立。
换句话说,如果存在某个
那么
Proof: Sufficiency via Max-Flow-Min-Cut
接下来证明反方向:
这个方向更难。我们用 max-flow/min-cut 来证明。
Flow Network Construction
把 bipartite graph 转化成 flow network:
- 加 source
和 sink ; - 对每个
,加边
capacity 为
- 对每条 bipartite edge
,加边
capacity 为
- 对每个
,加边
capacity 为
这里
由于所有实际限制 matching 的边 capacity 都是整数,integrality theorem 保证 maximum flow 可以取 integral flow。因此:
Suppose No Perfect Matching Exists
现在假设 Hall condition 成立,但不存在匹配所有
令 maximum matching 的大小为
对应的 maximum flow value 也是
由 Max-Flow-Min-Cut Theorem,存在一个 minimum cut
我们要从这个 cut 推出一个违反 Hall condition 的集合。
Structure of the Cut
把
因为
- 从
到 的边,每条 capacity 为 ,贡献 ; - 从
到 的边,每条 capacity 为 ,贡献 ; - 从
到 的 bipartite edges,每条 capacity 为 。
由于这个 minimum cut 的 capacity 是
所以它不可能切到任何
因此:
也就是说,
同时,这个 cut 的 capacity 是:
又因为
现在由
消去
而前面已经知道:
所以:
这就找到了一个集合
这与 Hall condition 矛盾。
因此假设不成立。只要 Hall condition 成立,就一定存在一个 size 为
Hall's Marriage Theorem 证毕。
The Three Cut Cases
也可以把 minimum cut 分成三种情况来看,它们对应上面的统一证明。
Case 1
如果:
那么 cut 会切断所有
但我们在反证中假设 minimum cut 的容量是
Case 2
如果:
那么 cut 会切断所有
如果 minimum cut 的容量
但 Hall condition 对
矛盾。所以 Case 2 也不可能发生。
Case 3
一般情况下,四块
都可能非空。
此时 minimum cut 的容量为:
又因为:
若
所以:
此外,不能有边从
于是:
这违反 Hall condition。
三个 case 都不可能,所以反证完成。
Application: Regular Bipartite Graph Has a Perfect Matching
一个经典应用是:
Prove that a regular bipartite graph always has a perfect matching.
现在可以直接用 Hall's Marriage Theorem 证明。
设
这里要求
先注意到:
因为
接下来验证 Hall condition。
任取
这些边全部连到
另一方面,
条来自
因此:
当
这正是 Hall condition。
所以存在一个 matching 能够匹配
结论:
Every nonzero regular bipartite graph has a perfect matching.
Residual Network Recap
在分析运行时间之前,先回顾 residual network。
给定 flow network
其中 residual edge 有两类。
第一类是 forward edge。如果原图中有边
那么 residual network 中有边
第二类是 backward edge。如果原图中有边
那么 residual network 中有反向边
forward edge 表示“还能继续往前送多少 flow”,backward edge 表示“最多可以撤回多少已经送过的 flow”。
Edmonds-Karp Algorithm
Ford-Fulkerson 更准确地说是一个 method,因为它没有规定每次怎么选择 augmenting path。
不同的 path 选择方式,会导致不同的时间复杂度:
- 如果随意选择 augmenting path,在整数 capacity 下复杂度可以是
- Edmonds-Karp Algorithm 固定每次选择 residual network 中边数最少的 augmenting path,也就是用 BFS 找 augmenting path。
Algorithm
输入 flow network
- 初始化
for every 。 - 构造 residual network
。 - 当
中还存在 - path: - 用 BFS 找一条边数最少的
- path ; - 令
- 用 BFS 找一条边数最少的
- 沿着
push units of flow; - 更新 flow
和 residual network 。
- 当不存在 augmenting path 时,返回
。
Edmonds-Karp 和普通 Ford-Fulkerson 的唯一差别是:
每次一定用 BFS 找 shortest augmenting path。
这里的 shortest 指的是边数最少,不是 capacity 或 weighted distance 最小。
Why BFS Helps
在每次迭代的 residual network
表示从
BFS 的作用是维护这些 distance。关键观察是:
随着 Edmonds-Karp 的运行,对任意点
, 不会下降。
为什么?
每次沿 shortest augmenting path 更新 flow 后,residual network 中可能新增一些反向边。假设 path 上有一条边
因为这条边在 BFS shortest path 上,所以更新前:
新增的反向边方向是从
这种边不会创造一条更短的从
这个 monotonicity 是 Edmonds-Karp 复杂度分析的核心。
Critical Edges
在某次迭代中,设当前 flow 为
令 bottleneck 为:
如果 path 上某条边
那么称
critical edge 会在这次 augmentation 之后消失,因为它的 residual capacity 变成
每次迭代至少有一条 critical edge。否则 bottleneck 就不存在。
How Often Can One Edge Be Critical?
一条边
它的反向边
必须先被某次 augmenting path 使用。
第一次
后来如果
又因为 distance 不下降:
所以:
也就是说:
同一条边两次成为 critical edge 之间,某个端点的 distance 至少增加
。
而 distance 的可能取值只有:
所以每条边最多成为 critical edge
Running Time
总结:
- 每次迭代至少产生一条 critical edge;
- 每条边最多成为 critical edge
次; - residual network 中边数是
; - 所以迭代次数最多是
每次迭代需要一次 BFS,并更新 path 上的 flow,时间为:
因此 Edmonds-Karp 的总时间复杂度是:
这个 bound 和 capacity 的数值大小无关,因此避免了
Dinic's Algorithm
Edmonds-Karp 每轮只 push 一条 shortest augmenting path。一个自然的想法是:
能不能一次性处理掉所有 shortest
- paths?
Dinic's Algorithm 就是沿着这个方向改进。
Level Graph
给定 residual network
然后构造 level graph
- 保留所有从 level
指向 level 的 residual edges; - 删除其他 residual edges。
也就是说,level graph 只保留可能出现在 shortest
Blocking Flow
在 level graph 中,我们希望找到一个 blocking flow。
blocking flow 的含义是:
push 一批 flow,使得 level graph 中每一条
- path 都至少包含一条 saturated edge。
换句话说,blocking flow 不一定是 level graph 上的 maximum flow,但它足够“堵住”当前所有 shortest paths。
Dinic's Algorithm Overview
- 初始化
。 - 构造 residual network
。 - 当
仍然可以从 到达: - 用 BFS 构造 level graph
; - 在
中找到一个 blocking flow; - 把 blocking flow 加到当前 flow
上; - 更新 residual network
。
- 用 BFS 构造 level graph
- 当
不可达时,返回 。
Finding a Blocking Flow
可以用 DFS 在 level graph 中找 blocking flow:
- 从
出发做 DFS。 - 如果 DFS 到达
,就沿着这条 path push bottleneck flow,并删除 path 上变成 saturated 的 critical edges。 - 如果 DFS 到达某个 dead-end vertex
,也就是 没有 outgoing edge 可以继续走,那么删除进入 的边,因为这些边不可能再帮助形成 - path。 - 重复直到 level graph 中没有
- path。
粗略分析:
- 每次搜索后至少删除一条边;
- 总共最多删除
条边; - 每次搜索路径长度最多
。
所以在一般图中,一个 blocking flow 可以在
时间内找到。
Why the Number of Phases Is Small
Dinic 的一次 BFS + blocking flow 称为一个 phase。
关键性质:
每个 phase 结束后,
严格增加。
原因是:当前 level graph 中包含了所有 shortest
新的
因此:
而
Running Time of Dinic's Algorithm
每个 phase:
- BFS 构造 level graph:
; - 找 blocking flow:
。
所以每个 phase 是:
phase 数量是
和 Edmonds-Karp 相比:
哪个更好取决于图的稠密程度,但 Dinic 的思想更强:每个 phase 同时处理多条 shortest paths。
Hopcroft-Karp-Karzanov Algorithm
对 maximum bipartite matching,还有一个更快的经典算法:
Hopcroft-Karp-Karzanov Algorithm 可以在
时间内找到 maximum bipartite matching。
它可以看成 Dinic's Algorithm 在 bipartite matching flow network 上的特例。
Flow Network for Bipartite Matching
给定 bipartite graph:
构造 flow network:
for every ,capacity 为 ; for every ,capacity 为 ; for every ,capacity 为 。
所有 capacity 都是
Why This Special Case Is Faster
在这个 unit-capacity bipartite network 中,blocking flow 可以更快地找到。
直观原因:
- 每条边的 capacity 都是
; - 找到一条 augmenting path 后,这条 path 上的边都会被 saturate;
- 在 level graph 中,每条边最多被 DFS 访问和删除常数次。
因此每个 phase 找 blocking flow 的时间可以做到:
而不是一般 Dinic 中的
更具体地说,在 level graph 中反复做 DFS:
- 如果找到一条
- path,就把这条 path 对应的 matching 翻转,并删除 path 上已经不能再用的边; - 如果 DFS 走到 dead end,就回退并删除刚刚证明无用的边;
- 每条边最多被访问和删除常数次。
所以一个 blocking flow 的计算是线性的。
接下来需要 bound phase 数量。
如果算法在
否则,经过
在二分图匹配的 residual network 中,剩余还可以增加的 matching 可以分解成若干条 vertex-disjoint augmenting paths。每条 path 长度至少
也就是说,剩余还能增加的 matching size 至多是
所以 phase 总数是:
每个 phase 用
Other Max-Flow Algorithms
除了 Edmonds-Karp 和 Dinic,还有很多更快或更适合特定场景的 max-flow 算法。
一些经典结果包括:
- Malhotra-Kumar-Maheshwari algorithm:
; - Dinic with dynamic trees:
; - Push-relabel algorithm:经典 bound 为
,后来有多种改进; - Orlin's algorithm:
; - 近年的 interior-point-method-based algorithms 可以达到接近线性的复杂度。
这些算法的细节不在这里展开。对本课程这一部分,最重要的是理解三条主线:
- Ford-Fulkerson 的复杂度依赖于怎么选 augmenting path;
- Edmonds-Karp 用 BFS 让 augmenting path 的层数具有 monotonicity;
- Dinic 用 level graph 和 blocking flow 一次处理多条 shortest paths。
Summary
本讲的主线是:
- Hall's Marriage Theorem 可以用 Max-Flow-Min-Cut Theorem 证明;
- regular bipartite graph 的 perfect matching 是 Hall's Theorem 的直接应用;
- Edmonds-Karp 用 BFS 实现 Ford-Fulkerson,复杂度为
- Dinic 每个 phase 处理所有 shortest augmenting paths,复杂度为
- Hopcroft-Karp-Karzanov 利用二分图匹配的特殊结构,复杂度为