最大流
最大流问题是在流网络中找到从源到汇的最大流量值,Ford-Fulkerson方法通过反复寻找增广路径来求解,Edmonds-Karp算法保证 的多项式时间。
定义
形式化定义
给定流网络 ,最大流问题的目标是找到一个流 ,使得 在所有合法流中最大。
Ford-Fulkerson方法是一个算法框架:
- 初始化流 为零流
- 在残差网络 中寻找增广路径
- 沿 增广流量,增大量为
- 重复步骤2-3,直到 中不存在增广路径
- 返回 即为最大流
Edmonds-Karp算法是Ford-Fulkerson方法的具体实现,使用BFS选择最短增广路径,时间复杂度为 。
核心性质
| 性质 | 描述 |
|---|---|
| 最大流最小割定理 | 最大流的值等于最小割的容量(推论24.3) |
| 增广路径判据 | 流 是最大流当且仅当 中不含增广路径(引理24.2) |
| 整数流性质 | 所有容量为整数时,Ford-Fulkerson方法产生整数流且一定终止 |
| Edmonds-Karp复杂度 | 使用BFS选最短增广路径,保证 |
| 路径长度单调递增 | Edmonds-Karp中每次增广路径长度单调不减(引理24.4) |
关系网络
graph LR A["最大流问题"] --> B["Ford-Fulkerson方法"] B --> C["残差网络"] C --> D["增广路径"] D --> E["Edmonds-Karp<br/>O(VE²)"] B --> F["Dinic算法<br/>O(V²E)"] B --> G["推送-重贴标签<br/>O(V³)"] A --> H["最大流最小割定理"] H --> I["最小割"] A --> J["二分匹配归约"]
章节扩展
第24章:最大流
最大流问题是第24章的核心。24.2节介绍了Ford-Fulkerson方法框架和Edmonds-Karp算法。
Ford-Fulkerson方法本身是一个框架而非具体算法——第3行”寻找增广路径”的策略未指定。不同的选择策略产生不同的算法:
- DFS选择(朴素Ford-Fulkerson):可能不终止,时间复杂度无多项式保证
- BFS选择(Edmonds-Karp):,保证多项式时间
- 最大容量增广路径:,其中 为最大容量
Edmonds-Karp算法的核心改进是使用BFS选择最短增广路径。引理24.4证明最短增广路径的边数单调递增,由此推导出每条边最多成为 次关键边,总增广次数为 ,每次BFS耗时 ,总时间为 。
第24章:最大二分匹配
24.3节展示了如何将最大二分匹配问题归约为最大流问题。通过构造特殊的单位容量流网络(源连接左部、右部连接汇、所有边容量为1),最大匹配的大小恰好等于最大流的值。在单位容量网络上,Edmonds-Karp的复杂度可改进到 。
补充
补充说明
除Edmonds-Karp外,重要的最大流算法还包括:
- Dinic算法(1970):,通过分层网络和阻塞流实现
- 推送-重贴标签算法(Goldberg-Tarjan, 1986):基本版本 ,FIFO改进版
- 最大流在图像分割、棒球淘汰判定、项目选择等实际问题中有广泛应用。