“两个方向的对应给出归约的正确性。任一匹配 $M$ 产生值为 $ M $ 的整数流:对每条 $\ell r\in M$ 沿路径 $s\to\ell\to r\to t$ 发送一个单位;这些路径…”
形式陈述 ​
容量网络以有限有向图为骨架,但允许平行弧与反平行弧。为保留这些情形,把
容量取值于非负实数。流是函数
以及每个
流值是源点净流出
最大流问题是在全部可行流中最大化
残量记录 ​
每条原弧
若原网络同时含反平行弧
直觉
容量限制每条有向通道能承载多少,中间顶点只转运、不生产也不消耗,目标是提高源到汇的净输送量。流不是一条路线:它可以在顶点处分叉与汇合,多条路线也会共享同一容量约束。
残量网络描述当前方案附近仍允许的改动。正向记录是尚未使用的余量,反向记录是撤销早先选择的权利;后者使算法能从局部不佳的路由中退回,而不必清空整张流重新开始。
流分解定理说明任意可行流都能拆成有限个源汇路径流与环流的非负组合。它为弧上的数值提供路线解释,却不要求最大流算法显式保存每个单位沿哪条路径移动;单商品流只区分总量,不追踪身份。
例子与边界
考虑容量
令
平行弧可以分别承载流;若只关心最大值与顶点守恒,把同方向平行弧合并为容量之和不会改变最优值,但会丢失逐弧输出。反平行弧不能与残量反向记录混同。自环对净流量和守恒两侧贡献相同,可以删除而不改变最大流值。
容量只是上界,不要求每条弧用满;负容量让约束区间为空,标准模型不允许。所谓“无穷容量”在有限实现中应由问题结构证明出的有限上界代替;例如当源的所有出弧容量均有限时,它们的容量和就是流值上界。随意使用机器最大整数可能在加法中溢出。带下界、费用、顶点容量或多商品的流都改变可行域,需先给出相应归约或新模型。
推论与应用
最大流最小割定理把无残量增广路转成与流同值的割证书。Ford–Fulkerson 方法逐条选择增广路,任意实容量下的终止性取决于选路规则;Dinic 算法按残量距离分阶段求阻塞流,得到与流值无关的一般多项式界;Push–Relabel维护预流、超额与高度,按局部操作推进。算法复杂度必须注明
若所有容量为整数,存在每条弧流量也为整数的最大流。这是“存在整数最优解”,不是说任意使用浮点近似的实现会自动返回整数,也不把依赖最大流值的伪多项式迭代数变成输入位数的多项式。
带下界与需求的环流通过消去下界、计算顶点需求并加入超级源汇来检查可行性,不能直接把下界当残量。全局最小割使用无向图且不固定
若若干源、汇只关心合计流量,可加入超级源和超级汇,并用各端点允许的供给、接收上界作为连接容量;若这些上界本身不存在,则要先从原网络推导安全有限界。该归约仍是单商品流,不能保留“某个源的单位必须送到某个指定汇”这类配对身份。
参考资料
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Ch. 24。
- Jon Kleinberg and Éva Tardos, Algorithm Design, Pearson, 2005,Ch. 7。
- Ravindra K. Ahuja, Thomas L. Magnanti, and James B. Orlin, Network Flows, Prentice Hall, 1993,Chs. 4–7。