Skip to content

模型Model

最大流

Maximum flow

在容量与流守恒约束下最大化源到汇净流量的问题。

形式陈述 ​

容量网络以有限有向图为骨架,但允许平行弧与反平行弧。为保留这些情形,把 A 看成有限的弧记录集合,每条记录 a 有尾点 tail(a) 与头点 head(a);端点相同的两条记录仍是不同弧。另给不同的源点 s,t∈V,以及容量函数

c:A→R≥0,

容量取值于非负实数。流是函数 f:A→R≥0,满足容量约束

0≤f(a)≤c(a)(a∈A)

以及每个 x∉{s,t} 上的守恒律

∑a:head(a)=xf(a)=∑a:tail(a)=xf(a).

流值是源点净流出

|f|=∑a:tail(a)=sf(a)−∑a:head(a)=sf(a).

最大流问题是在全部可行流中最大化 |f|。把所有顶点的净流出求和时,每条弧正负抵消,再代入中间点守恒,可得 |f| 同时等于汇点净流入。零流总是可行;有限维可行域由闭的线性等式与区间 0≤f(a)≤c(a) 构成且有界,由Heine–Borel 定理得紧性,再由连续线性目标的极值定理,最大值确实能达到。

残量记录 ​

每条原弧 a:u→v 产生两条带原弧身份的残量记录:正向记录 a+:u→v 的容量为 c(a)−f(a),表示还能增加多少;反向记录 a−:v→u 的容量为 f(a),表示能撤销多少。只保留正残量记录便得到残量有向多重图。沿残量路经过 a+ 时增加 f(a),经过 a− 时减少 f(a)。

若原网络同时含反平行弧 a:u→v 与 b:v→u,则 a− 和 b+ 虽方向相同,仍有不同来源与更新规则。残量表示必须保留原弧 ID 及其正反配对索引,不能只按端点把两者合成一个数;否则一次撤销可能被错记成给另一条原弧加流。

直觉

容量限制每条有向通道能承载多少,中间顶点只转运、不生产也不消耗,目标是提高源到汇的净输送量。流不是一条路线:它可以在顶点处分叉与汇合,多条路线也会共享同一容量约束。

残量网络描述当前方案附近仍允许的改动。正向记录是尚未使用的余量,反向记录是撤销早先选择的权利;后者使算法能从局部不佳的路由中退回,而不必清空整张流重新开始。

流分解定理为弧上的数值提供路线解释。在没有进入源点的弧、没有离开汇点的弧这一常见约定下,可行流可以拆成源到汇路径流与环流的非负组合。本页允许这些弧,因此对任意可行流作分解时还可能出现汇到源的路径流,它们对净流值贡献为负。例如仅在 t→s 上放一单位流就是可行流,值为 −1,不能解释成非负的源到汇路径流之和。求最大值时可以去掉这些反向路径流,不会降低目标。

这种路线解释不要求算法显式保存每个单位沿哪条路径移动;单商品流只区分总量,不追踪身份。残量反向边撤回的是某条弧的流量,而不是要求现实中真的把某个带身份的包裹送回去。

残量增广、反向边与流量更新
例子与边界

考虑容量

s→a:3,s→b:2,a→b:1,a→t:2,b→t:3.

令 f(s,a)=3,f(s,b)=2,f(a,t)=2,f(a,b)=1,f(b,t)=3,中间点均守恒,流值为 5。源出弧总容量也是 3+2=5,因此任何流都不可能更大;这个同值流与割给出了可复算的最优证书。

一次必须撤销旧选择的增广 ​

再看所有容量均为 1 的网络 s→a,s→b,a→b,a→t,b→t。若先沿 s→a→b→t 送一单位,继续只看原图的未满正向弧便找不到源汇路,但这不是最大流。残量图中存在 s→b→a→t,其中 b→a 是原弧 a→b 的反向记录。

沿此路增广一单位后,f(a,b) 从 1 减到 0,f(s,b) 与 f(a,t) 从 0 增到 1,其他已有流保持。结果变成两条路线 s→a→t 与 s→b→t,总流值为 2。每个内部点沿残量路一进一出,故守恒不变;步长不超过各条残量容量,故原弧上的上下界也不被破坏。

平行弧可以分别承载流;若只关心最大值与顶点守恒,把同方向平行弧合并为容量之和不会改变最优值,但会丢失逐弧输出。反平行弧不能与残量反向记录混同。自环对净流量和守恒两侧贡献相同,可以删除而不改变最大流值。

容量只是上界,不要求每条弧用满;负容量让约束区间为空,标准模型不允许。所谓“无穷容量”在有限实现中应由问题结构证明出的有限上界代替;例如当源的所有出弧容量均有限时,它们的容量和就是流值上界。随意使用机器最大整数可能在加法中溢出。带下界、费用、顶点容量或多商品的流都改变可行域,需先给出相应归约或新模型。

推论与应用

最大流最小割定理把无残量增广路转成与流同值的割证书。Ford–Fulkerson 方法逐条选择增广路,任意实容量下的终止性取决于选路规则;Dinic 算法按残量距离分阶段求阻塞流,得到与流值无关的一般多项式界;Push–Relabel维护预流、超额与高度,按局部操作推进。算法复杂度必须注明 |V|、原弧记录数、容量类型与算术模型。

若所有容量为整数,存在每条弧流量也为整数的最大流。这是“存在整数最优解”,不是说任意使用浮点近似的实现会自动返回整数,也不把依赖最大流值的伪多项式迭代数变成输入位数的多项式。

带下界与需求的环流通过消去下界、计算顶点需求并加入超级源汇来检查可行性,不能直接把下界当残量。全局最小割使用无向图且不固定 s,t,虽可通过多次点对最小割联系,却不是一次固定源汇最大流的同一问题。多商品流还让多种商品竞争共享容量,需要新的变量与约束。

若若干源、汇只关心合计流量,可加入超级源和超级汇,并用各端点允许的供给、接收上界作为连接容量;若这些上界本身不存在,则要先从原网络推导安全有限界。该归约仍是单商品流,不能保留“某个源的单位必须送到某个指定汇”这类配对身份。

单源同时向多个终点发送同一批符号时,中间节点可采用线性网络编码。蝴蝶网络在中央瓶颈发送一个 XOR,让拥有不同辅助符号的两个终点都补齐缺口。此时验收对象是各终点传输矩阵的秩;把多个终点分别求出的流直接叠加,可能重复占用同一条边。

参考资料
  • 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。
  • Robert Sedgewick、Kevin Wayne,Algorithms,4th ed.,2011,§6.4 Maximum Flow:正反残量更新与增广路。
关系图谱27 个相邻概念 · 4 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系