网络流与匹配
网络流把"容量约束下的运输"形式化:边上限流,求源到汇的最大流量。它的威力在于建模——很多看似无关的问题(匹配、切割、调度)都能归约到流。本章讲主流算法、最大流最小割定理与匹配。
流网络:有向图,每条边有容量 ,源 、汇 。流满足两条:容量约束()与守恒(除源汇,进 = 出)。求 的最大流量。
残余网络:剩余容量 加反向边 ——反向边是所有流算法的关键:它允许"撤销"之前的流,把次优分配改掉。没有反向边,贪心会卡在次优解。
Ford-Fulkerson
Section titled “Ford-Fulkerson”反复在残余网络中找增广路径( 的正容量路径),沿路径推流。整数容量时终止,但找路径的方式决定复杂度:任意路径最坏 (慢),按容量最大或最短路径选择则多项式。
Edmonds-Karp
Section titled “Edmonds-Karp”增广路径取 BFS(边数最少)。复杂度 ——增广次数有界 ,与容量无关。实现最简单的多项式流算法。
分层网络(按到源的距离分层)+ 阻塞流(一次 DFS 推尽可能多的流):阶段数 ,每阶段 ,总 ;单位容量图上 。实践中通常最快,是竞赛与工程的主流。
| 算法 | 复杂度 | 备注 |
|---|---|---|
| Ford-Fulkerson | $O(E \cdot | f |
| Edmonds-Karp | BFS 找增广路,实现最简 | |
| Dinic | 分层 + 阻塞流,实践主流 |
最大流最小割定理
Section titled “最大流最小割定理”最小割:把顶点分成含 与含 的两部分,横跨的容量之和;最小的那个是"最窄的瓶颈"。定理:
证明思路:最大流时残余网络无增广路 → 可达集即最小割。最大流 = 最小割是线性规划对偶的特例——原始问题(流)与对偶问题(割)的值相等,这是 LP 对偶最直观的实例。推论与应用:对偶性、图的连通性(边连通度 = 最小割)、图像分割(前景/背景切割)。
匈牙利算法求二分图最大匹配:反复找增广路径(交替未匹配/匹配边的路径),找到则翻转增配。。
更简单的建模:二分图匹配可用最大流解——源连左侧(容量 1),左右之间边容量 1,右侧连汇(容量 1),最大流即最大匹配。最小点覆盖 = 最大匹配(König 定理)也是对偶性的实例。
建图能力比算法本身更重要。常见的归约模式:
- 元素配额 → 源/汇容量 1(匹配、任务分配);
- 约束上限 → 边容量(调度、带宽);
- "选或不选" → 最小割(项目选择问题:收益进汇、成本进源);
- 状态转移 → 分层图(时间作为一层,边跨层)。
判断信号:问题里有"容量/上限"、有"配对/分配"、有"分割/选择"——先想流。
- 残余网络与反向边是流算法的关键:允许撤销次优分配
- Dinic(分层 + 阻塞流)是实践主流;Edmonds-Karp 实现最简
- 最大流 = 最小割是 LP 对偶的特例;最小割是"最窄的瓶颈"
- 二分图匹配可用最大流解;最小点覆盖 = 最大匹配(König)
- 建图能力比算法更重要:容量、配对、分割信号先想流