本节摘要:割是把顶点集分成"含源点的一侧"与"含汇点的一侧"的划分,割容量是横跨两侧的边容量之和;最大流最小割定理断言——流网络中最大流的值恰好等于最小割的容量。它同时给出三件事的等价判定(流最大、残存网络无增广路、存在割被流恰好填满),是最大流算法正确性与终止性的理论根基,也让"找系统瓶颈"变成了一个可计算的问题。
阅读完本节,你应当能够:
继续水利原型。无论调度多么聪明,系统的输水上限受制于一件事:任何把水库与城市隔开的"截面"上,管道的总容量。想象用一把剪刀横剪管网,把顶点分成"水库侧 S"与"城市侧 T"——水从 S 流向 T 只能走被剪断的那几条管,它们的容量之和就是这个割的容量。每个割都是流量的天花板:流要穿过每个割,值不可能超过任何割的容量。
割的正式定义:顶点集的一个二分(S 与 T 互补),源点在 S、汇点在 T。割容量:所有从 S 指向 T 的边的容量之和(注意只算正向边——T 指向 S 的边不载"净流量过割")。最小割:容量最小的那个割,即所有天花板里最低的那一个。
于是有天然的不等式链:任何流的值 ≤ 任何割的容量 ≤ 最小割的容量。最大流能不能顶到这块最低的天花板?定理回答:恰好能。
最大流最小割定理:流网络中,以下三个命题等价——
论证梗概(三步循环互推,证一等价于全部):
这份论证的漂亮之处在于构造性:它不但证明了等式,还告诉我们"算法跑完后的残存网络里,从源点做一次可达性标记(BFS/DFS),标记边界就是一张最小割"。
用一个小网络走完全程(原始文集同款结构):源点 A,汇点 D,边为 A 到 B 容量 4、A 到 C 容量 2、B 到 D 容量 5、C 到 B 容量 7、C 到 D 容量 5(沿用原始文集中"残存网络"一节的算例数值:A 到 B 残存 4、A 到 C 残存 2 等)。
逐轮增广: 第1轮 路径 A-B-D 瓶颈 min4 5 为4 增广4 第2轮 路径 A-C-D 瓶颈 min2 5 为2 增广2 第3轮 残存网络中 A的出边全部归0 无增广路 停 最大流 = 4加2 = 6 最小割 残存网络中从A可达的只有A本身 割为 A 与 其余 割容量 = A到B的4 加 A到C的2 = 6 与最大流吻合
关键观察:最终从源点可达的集合恰好只有源点自己——因为它的两条出边都被"灌满"了。这就是"割被流填满"的直观样子:最小割就是被最大流顶住的那块天花板。
| 概念 | 内容 | 工程含义 |
|---|---|---|
| 割 | 顶点二分 源汇分居两侧 | 一次"剪刀"方案 |
| 割容量 | S 指向 T 的边容量和 | 该剪法的天花板 |
| 最小割 | 容量最小的割 | 最低天花板 真瓶颈 |
| 最大流值 | 等于最小割容量 | 系统极限输送能力 |
| 满载横跨边 | 流量等于容量 | 瓶颈所在的具体管道 |
定理的日常价值不止"算最大流",更在**"指出该改哪里"**:
一个容易忽略的对偶视角:最大流是最优调度问题(怎么安排流量),最小割是最脆弱截面问题(哪里是软肋)。定理说这两个看似无关的优化问题共享同一个数值——运筹学里这类"对偶"结构屡见不鲜,线性规划的对偶定理正是它的一般形式。
⚠️ 常见坑:把"T 指向 S 的边"也算进割容量。割容量只数"从源侧指向汇侧"的边;反向边在"净流量过割"的账目里做减项。另一个坑:以为最小割的"割"是删边——它是顶点集的划分,割容量只是对划分的一个计量,不必真的删。
💡 关键直觉:把割想成"工资总账":流是每月开销,任何月份的开销都不超过账上任何一个账户的余额上限;定理说,总有一笔账(最小割)恰好被开销顶满——想让开销再涨,只能先给那笔账加钱。
"最大流等于最小割"是线性规划对偶在最流问题上的具象:最大流是"在约束下最大化目标"的原问题,最小割是"用权重给约束定价"的对偶问题。对偶的最优值相等(强对偶性),于是同一个数字有了两副面孔:调度者看到"还能再送多少",审计者看到"哪里是最窄的门"。这个视角帮你预测一类现象:凡是"最大化某种输送"的问题,通常都藏着一个"最小化某种切断"的影子问题——遇到其一,主动去找其二,常能白拿一个解题入口。
工程上这个对偶还给了"灵敏度分析"的快捷通道:最小割上的边是"紧约束"(满了),割外的边是"松约束"(有余量)。扩容紧约束的边才能提升总流,扩容松约束的边纯属浪费——这套语言与运筹学、甚至经济学的"影子价格"完全同构。
可能不唯一(多个割并列最小),算法输出哪一个取决于可达标记的细节。并列时业务上可按次级标准(施工难度、拆迁成本)挑选。判定"所有最小割"有专门算法,但多数场景拿到任意一个就够用。
割容量定义为"从源侧指向汇侧的边容量和",衡量的是"流过这个划分的净输送上限"。反向边承载的是回流,在净流量的账目里做减项;若把它也计入,得到的量不再对应任何流的上界,定理失效。
最大流跑完后,在最终残存网络上从源点做一次 BFS 或 DFS 标记可达集 S,其余为 T;横跨 S 到 T 的原网络边(此刻全部满载)即构成一个最小割。建议把它做成最大流接口的默认输出,诊断价值极高。
成立,但先做标准化:多源多汇用超级源汇归一(4.4 节);无向边可拆成两条有向边(容量平分或各设全容量,按语义定)。标准化之后的网络原封不动地享受定理。这说明定理的适用面由"容量加守恒"结构决定,与表面的图形态无关。
取四顶点网络(源、汇各一,中间两点),割的总数是"中间点的子集划分",共四个。逐个计算割容量,找出最小者;再跑一遍 Edmonds-Karp 求最大流,验证两数相等;最后按"残存网络可达标记"读出最小割,与穷举结果对照。整个过程不超过十五分钟,但"最大流等于最小割"从定理变成了你亲手验证过的事实。进阶一步:把某条边的容量改小,重跑全流程,观察最小割如何"跳"到包含新瓶颈的位置。
被要求口述定理时,一个稳妥的三段式:先说结论(最大流的值等于最小割的容量);再给直观(每个割都是流的天花板,最小割是最低的天花板,而最大流恰好顶住它);最后补构造(算法终止后从源点标记可达集即得最小割)。三句话有结论、有直觉、有操作,比背长定义更能体现理解层次。
不能直接推广——费用版的两个目标(流最大、费最小)没有同样简洁的"等于某个割"刻画,取而代之的是"沿最短增广路增广即可达到最小费用"的算法性结论。但这不妨碍对偶思想继续工作:最小费用流同样存在线性规划对偶,其形式涉及"点势"与"约简费用"——Johnson 重赋权的势函数概念在此再次登场,图论的大概念就这么一以贯之。
顺带一个命名澄清:文献里"割"有时写作 s-t cut 以强调源汇分居两侧,与无向图里的"边割集"概念不同名同义之外有别;读资料时认准"源在 S、汇在 T"这一条即可避免混淆。
定理在手,下一节把 4.1 的"增广"和本节的"停止条件"组装成可运行的算法——Ford-Fulkerson 框架与它的多项式化改造 Edmonds-Karp。