Archipelago

Lec 13增量改进:最大流与最小割

讲义完成更新于 2026-09-17

Lec 13 增量改进:最大流与最小割(Incremental Improvement: Max Flow & Min Cut)

TL;DR

  • 流网络与物理守恒:在有向带权容量网络中定义满足容量限制、反对称性与中间节点电荷守恒的流函数,净流值全局守恒。
  • 残余网络与增广路径:引入反向边抵消机制构建残余网络 GfG_f,沿着残余容量严格大于零的有向路径增广,系统化提供“试错与撤销”的自愈能力。
  • 最大流最小割定理:严格证明“流量达到割容量”、“当前流为最大流”、“残余网络中不存在增广路径”三大命题互为充要条件,建立连续流与离散割的强对偶纽带。
  • Ford-Fulkerson 及其多项式改进:朴素方法在整数容量下耗时 O(E∣f∗∣)O(E |f^*|),Edmonds-Karp 算法通过 BFS 选择最短增广路径,将复杂度彻底解耦容量大小,锁定在纯多项式阶 O(VE2)O(V E^2)。

流网络与物理意义

在算法设计中,“增量改进”(Incremental Improvement)是一种从任意可行解出发,通过局部可行动作不断提升目标函数直到最优的通用策略。网络流问题是增量改进范式最纯粹的代表。

最大流在实际基础设施中具有广泛应用:最小生成树(MST)关注以最低成本完成物理连通,而最大流则关注基础设施建成之后,整个拓扑管网所能承载的物理输送极限,并能精确识别瓶颈链路以指导扩容。

流网络的形式化定义

定义

流网络(Flow Network) 流网络是一个有向图 G=(V,E)G = (V, E),包含一个源点(Source)s∈Vs \in V 和一个汇点(Sink)t∈Vt \in V。每条有向边 (u,v)∈E(u, v) \in E 拥有非负容量 c(u,v)≥0c(u, v) \ge 0。若 (u,v)∉E(u, v) \notin E,则 c(u,v)=0c(u, v) = 0。

流网络拓扑与边容量示意图

网络中的流遵循类似基尔霍夫电流定律的守恒准则:

  • 流入中间顶点 uu 的总量严格等于流出 uu 的总量;
  • 流量本质上是速率(Rate),而非静态储存量。

顶点流量守恒与环流抵消示意图

为保证模型的一般性,建立两项基本简化假设:

  1. 无反向平行边:若 (u,v)∈E(u, v) \in E,则 (v,u)∉E(v, u) \notin E(若存在反向边,可通过增加一个虚拟中间节点将其拆分);
  2. 无自环:不存在形如 (u,u)(u, u) 的自循环边。

反向平行边引入虚拟节点的拓扑转换示意图

净流(Net Flow)与流值性质

净流是一个映射 f:V×V→Rf: V \times V \to \mathbb{R},满足:

  1. 容量限制:∀u,v∈V, f(u,v)≤c(u,v)\forall u, v \in V, \, f(u, v) \le c(u, v);
  2. 流量守恒:∀u∈V∖{s,t}, ∑v∈Vf(u,v)=0\forall u \in V \setminus \{s, t\}, \, \sum_{v \in V} f(u, v) = 0;
  3. 反对称性:∀u,v∈V, f(u,v)=−f(v,u)\forall u, v \in V, \, f(u, v) = -f(v, u)。

流 ff 的**总流量值(Value)**定义为从源点流出的净流量:

∣f∣=∑v∈Vf(s,v)=f(s,V)|f| = \sum_{v \in V} f(s, v) = f(s, V)

定理

汇点流入量等于源点流出量

∣f∣=f(V,t)|f| = f(V, t)

源点与汇点全局净流守恒示意图


割集与弱对偶性质

定义

流网络的割(Cut) 割 (S,T)(S, T) 将顶点集 VV 划分为互不相交的两个子集 SS 与 T=V∖ST = V \setminus S,满足 s∈Ss \in S 且 t∈Tt \in T。 穿越割的净流 f(S,T)f(S, T) 定义为:

f(S,T)=∑u∈S∑v∈Tf(u,v)f(S, T) = \sum_{u \in S} \sum_{v \in T} f(u, v)

割 (S,T)(S, T) 的容量 c(S,T)c(S, T) 仅统计从 SS 指向 TT 的正向边容量:

c(S,T)=∑u∈S∑v∈Tc(u,v)c(S, T) = \sum_{u \in S} \sum_{v \in T} c(u, v)

割集划分与跨越割集的边集合示意图

净流守恒引理

定理

任意割上的净流恒等于总流量 对于任意可行流 ff 和任意合法割 (S,T)(S, T),恒有:

f(S,T)=∣f∣f(S, T) = |f|

证明:

f(S,T)=f(S,V∖S)=f(S,V)−f(S,S)f(S, T) = f(S, V \setminus S) = f(S, V) - f(S, S)

由于反对称性,f(S,S)=0f(S, S) = 0。将 SS 拆分为源点 {s}\{s\} 与其余点 S∖{s}S \setminus \{s\}:

f(S,V)=f(s,V)+f(S∖{s},V)f(S, V) = f(s, V) + f(S \setminus \{s\}, V)

根据流量守恒,除源汇点外的所有节点向全图的流出量均为 0,即 f(S∖{s},V)=0f(S \setminus \{s\}, V) = 0。因此:

f(S,T)=f(s,V)=∣f∣f(S, T) = f(s, V) = |f|

割容量计算仅统计由S指向T的正向边示意图

弱对偶定理

弱对偶上界 对于网络中的任意可行流 ff 与任意割 (S,T)(S, T),总流量必不超过割容量:

∣f∣≤c(S,T)|f| \le c(S, T)

证明:

∣f∣=f(S,T)=∑u∈S∑v∈Tf(u,v)≤∑u∈S∑v∈Tc(u,v)=c(S,T)|f| = f(S, T) = \sum_{u \in S} \sum_{v \in T} f(u, v) \le \sum_{u \in S} \sum_{v \in T} c(u, v) = c(S, T)

这表明:任意割的容量都是最大流天然的理论天花板;反之,任意流的大小都是最小割容量的下界。


残余网络与增广路径

如何寻找增加流量的途径?若仅在原图中有剩余容量的正向边上寻找路径,极易陷入死胡同(例如过早占满了某条中间边导致更优全局流无法建立)。必须引入“退流”机制。

残余网络(Residual Network)

对任意边 (u,v)(u, v),定义其残余容量(Residual Capacity) cf(u,v)c_f(u, v):

cf(u,v)=c(u,v)−f(u,v)c_f(u, v) = c(u, v) - f(u, v)

残余网络 Gf=(V,Ef)G_f = (V, E_f) 由所有残余容量严格大于零的边构成:

Ef={(u,v)∈V×V∣cf(u,v)>0}E_f = \{(u, v) \in V \times V \mid c_f(u, v) > 0\}

原网络当前流与对应残余网络拓扑对比示意图

  • 正向边:若原边已使用流量 f(u,v)<c(u,v)f(u, v) < c(u, v),正向残余容量为 c(u,v)−f(u,v)c(u, v) - f(u, v),代表可进一步追加的流量;
  • 反向边:若原边已承载流量 f(u,v)>0f(u, v) > 0,反向残余容量为 cf(v,u)=c(v,u)−f(v,u)=0−(−f(u,v))=f(u,v)c_f(v, u) = c(v, u) - f(v, u) = 0 - (-f(u, v)) = f(u, v),代表将已有流量原路推回(撤销)的自由度!

增广路径(Augmenting Path)

增广路径 pp 是残余网络 GfG_f 中从源点 ss 到汇点 tt 的一条简单有向路径。该路径所能承载的瓶颈容量为:

cf(p)=min⁡(u,v)∈pcf(u,v)>0c_f(p) = \min_{(u, v) \in p} c_f(u, v) > 0

残余网络中检测增广路径示意图一

沿增广路径推送 cf(p)c_f(p) 的流量后,新流量 f′=f↑fpf' = f \uparrow f_p 的总值严格增加:

∣f′∣=∣f∣+cf(p)>∣f∣|f'| = |f| + c_f(p) > |f|

残余网络沿增广路径推流后更新状态示意图二


最大流最小割定理(Max-Flow Min-Cut Theorem)

最大流最小割定理(Ford & Fulkerson, 1956) 设 ff 为流网络 G=(V,E)G = (V, E) 中的一个可行流,则以下三个命题在逻辑上完全等价:

  1. 存在某个割 (S,T)(S, T),使得当前流量达到该割的容量:∣f∣=c(S,T)|f| = c(S, T);
  2. 流 ff 是网络 GG 的最大流;
  3. 残余网络 GfG_f 中不存在任何从源点 ss 到汇点 tt 的增广路径。 :::

严谨环状推导证明

  • (1)   ⟹  \implies (2): 已知 ∣f∣=c(S,T)|f| = c(S, T)。由弱对偶定理,对任意可行流 f′f',恒有 ∣f′∣≤c(S,T)=∣f∣|f'| \le c(S, T) = |f|。因此没有任何可行流的流量能超越 ∣f∣|f|,ff 必为最大流。
  • (2)   ⟹  \implies (3): 采用反证法。若残余网络 GfG_f 中仍存在增广路径 pp,则可构造新流 f′=f↑fpf' = f \uparrow f_p,使得 ∣f′∣=∣f∣+cf(p)>∣f∣|f'| = |f| + c_f(p) > |f|,这与 ff 是最大流的假设直接矛盾。
  • (3)   ⟹  \implies (1): 假设残余网络 GfG_f 中已无从 ss 到 tt 的增广路径。 我们在 GfG_f 中定义集合 SS 为:从源点 ss 出发,沿着残余容量大于零的边所能到达的所有顶点集合: S={v∈V∣在 Gf 中存在从 s 到 v 的有向路径}S = \{v \in V \mid \text{在 } G_f \text{ 中存在从 } s \text{ 到 } v \text{ 的有向路径}\} 令 T=V∖ST = V \setminus S。显然 s∈Ss \in S;又因为 GfG_f 中无增广路径,故汇点 t∉St \notin S,即 t∈Tt \in T。因此 (S,T)(S, T) 构成网络的一个合法割。

构造割集S与T并证明正向边全部饱和示意图

现在考察任意跨越该割的边对 u∈S,v∈Tu \in S, v \in T:

  • 在残余网络 GfG_f 中,必定有 cf(u,v)=0c_f(u, v) = 0(若 cf(u,v)>0c_f(u, v) > 0,则既然 uu 可达,通过边 (u,v)(u, v) 则 vv 亦必然可达,从而 v∈Sv \in S,与 v∈Tv \in T 矛盾);
  • 由残余容量定义:cf(u,v)=c(u,v)−f(u,v)=0  ⟹  f(u,v)=c(u,v)c_f(u, v) = c(u, v) - f(u, v) = 0 \implies f(u, v) = c(u, v)(所有从 SS 指向 TT 的边均已完全饱和);
  • 同理,对于从 v∈Tv \in T 到 u∈Su \in S 的反向边,必有 cf(v,u)=0  ⟹  f(v,u)=c(v,u)=0  ⟹  f(u,v)=0c_f(v, u) = 0 \implies f(v, u) = c(v, u) = 0 \implies f(u, v) = 0。

计算穿越该割的净流量:

∣f∣=f(S,T)=∑u∈S∑v∈Tf(u,v)=∑u∈S∑v∈Tc(u,v)=c(S,T)|f| = f(S, T) = \sum_{u \in S} \sum_{v \in T} f(u, v) = \sum_{u \in S} \sum_{v \in T} c(u, v) = c(S, T)

证毕!由此不仅证明了最大流等于最小割容量,且给出了通过残余网络的可达性搜索直接提取最小割瓶颈边集的构造性方法。


Ford-Fulkerson 算法及其多项式改进

基础 Ford-Fulkerson 方法

def ford_fulkerson(G, s, t):
    initialize flow f to 0 on all edges
    while exists an augmenting path p in residual graph G_f:
        c_f_p = min(c_f(u, v) for (u, v) in p)
        for edge (u, v) in p:
            f(u, v) += c_f_p
            f(v, u) -= c_f_p
        update residual graph G_f
    return f

整数容量下的终止性与病态收敛

若网络中的边容量均为整数:

  • 每次增广至少将总流量增加 1 个单位整数(cf(p)≥1c_f(p) \ge 1);
  • 增广路径查找(DFS/BFS)耗时 O(E)O(E);
  • 循环至多执行 ∣f∗∣|f^*| 次(∣f∗∣|f^*| 为最大流值);
  • 总运行时间为 O(E⋅∣f∗∣)O(E \cdot |f^*|)。

病态反例:若四边形网络中间跨接一条容量为 1 的细边,而上下两条路径容量为 10910^9。若 DFS 不幸交替在两条路径间来回拉锯,每次增广流量仅为 1,将循环 2⋅1092 \cdot 10^9 次,复杂度与容量数值挂钩,属于伪多项式时间(Pseudo-polynomial)。若容量为无理数,甚至可能无法终止并不收敛于正确最大流。

Edmonds-Karp 算法:最短路径选择

1972 年,Jack Edmonds 与 Richard Karp 提出了关键优化准则:在残余网络中使用广度优先搜索(BFS)选取边数最少(Shortest in terms of edge count)的增广路径。

Edmonds-Karp 单调性与复杂度 在使用 BFS 寻找最短增广路径时:

  1. 残余网络中任意节点 vv 到源点 ss 的最短路径距离 df(s,v)d_f(s, v) 在每次增广后单调不减;
  2. 增广总次数严格受限于 O(VE)O(V E);
  3. Edmonds-Karp 算法的整体运行时间为 O(VE2)O(V E^2),属于真正的强多项式时间。 :::

证明概要: 称增广路径上满足 cf(u,v)=cf(p)c_f(u, v) = c_f(p) 的边为关键边(Critical Edge)。每次推流后至少有一条关键边从残余网络中消失。 一条边 (u,v)(u, v) 若要在未来重新出现,必须经历一次反向推流,这意味着 vv 到 ss 的距离至少增加了 2。 由于节点到源点的距离上限为 ∣V∣−1|V| - 1,每条有向边成为关键边的次数至多为 ∣V∣/2|V|/2 次。 图中共有 2∣E∣2|E| 条可能的残余边,因此关键边出现的总次数(即增广迭代总次数)至多为 2∣E∣×∣V∣2=O(VE)2|E| \times \frac{|V|}{2} = O(V E)。单次 BFS 耗时 O(E)O(E),乘积即得总耗时 O(VE2)O(V E^2)。

容量缩放算法(Capacity Scaling)

另一种实用优化是类似二进制分解的容量缩放算法:

  • 设定阈值 Δ=2⌊log⁡2C⌋\Delta = 2^{\lfloor \log_2 C \rfloor}(CC 为最大边容量);
  • 在当前阶段,只寻找瓶颈容量 cf(p)≥Δc_f(p) \ge \Delta 的增广路径;
  • 当不存在残余容量 ≥Δ\ge \Delta 的路径时,令 Δ←Δ/2\Delta \gets \Delta / 2 进入下一轮;
  • 算法经历 O(log⁡C)O(\log C) 个缩放阶段,每个阶段至多执行 2∣E∣2|E| 次增广,总复杂度优化为 O(E2log⁡C)O(E^2 \log C)。

我的理解

最大流最小割定理是组合优化与运筹学中最辉煌的里程碑之一:

  1. 试错抵消与反向边魔力:残余网络中“反向边允许推回已有流量”的设计,是算法从局部贪心飞跃为全局精确优化的转折点。它给予了算法一种宝贵的“撤销(Undo)机制”——你不需要一开始就做出绝对正确的全局规划,只要保留纠错管道,持续的增量局部改进就能精确逼近全局最优。
  2. 强对偶的几何直觉:最大流与最小割的等价性是线性规划强对偶定理的离散具象化。最大流是在容量约束的多胞体中寻找最远极值点,而最小割是寻找收紧该多胞体支撑超平面的瓶颈边界。割集就是流网络的“咽喉”,流值充盈到极限的瞬间,咽喉必然紧绷。
  3. 从数值依赖到拓扑收敛:从 Ford-Fulkerson 的 O(E∣f∗∣)O(E |f^*|) 演进到 Edmonds-Karp 的 O(VE2)O(V E^2),生动展现了理论计算机科学对“组合多项式性”的纯粹追求:通过在残余网络中施加最简单的广度优先拓扑度量,成功剥离了数值位宽的束缚,让计算复杂度真正由图的拓扑维度自身所决定。 :::