问题
概念:源点s,汇点t,除源点和汇点外, 其他顶点的流入和流出相等
目标:从源点到汇点的最大流量
正式描述:
网络流图G=(V,E)
边的容量c(u,v) ≥ \geq ≥ 0
特殊顶点:源点s,汇点t
在源点和汇点之间,有经过一些中间顶点v的通路s→……→v→……→t
流函数:
容量约束,f(u,v) ≤ \leq ≤ c(u,v)
斜对称,f(u,v)=-f(v,u)
流守恒, ∑ v ∈ V f ( u , v ) = f ( u , V ) = 0 \displaystyle \sum_{v∈V}f(u,v)=f(u,V)=0 v∈V∑f(u,v)=f(u,V)=0或 ∑ v ∈ V f ( v , u ) = f ( V , u ) = 0 \displaystyle \sum_{v∈V}f(v,u)=f(V,u)=0 v∈V∑f(v,u)=f(V,u)=0
流的抵消
在两个顶点间不需要相向对流,因为可以抵消,而斜对称性只是为了符号方便性。
∣ f ∣ = ∑ v ∈ V f ( s , v ) = f ( s , V ) = f ( V , t ) |f|=\displaystyle \sum_{v∈V}f(s,v)=f(s,V)=f(V,t) ∣f∣=v∈V∑f(s,v)=f(s,V)=f(V,t)
Ford-Fulkerson方法
思想:不断地增大流,直到达到流的最大值
通过剩余流和剩余流图实现
剩余流: c f ( u , v ) c_f(u,v) cf(u,v)f=c(u,v)-f(u,v)
剩余流图: G f ( V , E f ) G_f(V,E_f) Gf(V,Ef), E f = ( u , v ) ∈ V ∗ V : c f ( u , v ) > 0 E_f={(u,v) ∈ V*V: c_f(u,v) > 0} Ef=(u,v)∈V∗V:cf(u,v)>0
(| E f E_f Ef| ≤ \leq ≤ 2|E|:因为在剩余网络流图 E f E_f Ef中的边要么在E中, 要么反向)
增流通路
Ford-Fulkerson(G,s,t)
initialize flow f to 0
while there exists an augmenting path p
do augment flow f along p
return f
不再有增流通路时,达到最大流
切割
一个切割将V分割成S,和T=V-S,使得s ∈ S,t ∈ T
流经切割的网络流f(S,T)是所有边(u,v), u ∈ S,v ∈ T的流f(u,v)之和
切割的网络流容量c(S,T)是所有边(u,v), u ∈ S, v ∈ T的流容量c(u,v)之和
引理:对于任何切割(S,T)和流f, 有f(S,T)=|f|
推论:网络流图G中的任意流f以任何切割的流容量为上限
最大流最小切割定理
对于网络流图
G=(V,E), s是源点, t是汇点, f是G中的流, 下面三个语句是等价的:
1. f是G中的最大流
2. 剩余流图 G f G_f Gf中不再有增流通路
3. 存在一个切割(S,T), |f| = c(S,T)
基本FordFulkerson算法
FordFulkerson(G,s,t)
for each edge (u,v) ∈ E(G)
do f[u,v] ← 0
f[v,u] ← 0
while there exists a path p from s to t in the residual network G f G_f Gf
do c f ( p ) c_f(p) cf(p) ← min{ c f ( u , v ) c_f(u,v) cf(u,v):(u,v) is in p}
for each edge (u,v) in p
do f[u,v] ← f[u,v] + c f ( p ) c_f(p) cf(p)
f[v,u] ← -f[u,v]
缺陷:如果出现以下情况,则需要重复999999次
E-K算法
先回顾FordFulkerson算法:
FordFulkerson(G,s,t)
1 for each edge (u,v) ∈ E(G)
2 do f[u,v] ← 0
3 f[v,u] ← 0
4 while there exists a path p from s to t in the residual network G f G_f Gf
5 do c f ( p ) c_f(p) cf(p) ← min{ c f ( u , v ) c_f(u,v) cf(u,v):(u,v) is in p}
6 for each edge (u,v) in p
7 do f[u,v] ← f[u,v] + c f ( p ) c_f(p) cf(p)
8 f[v,u] ← -f[u,v]
E-K算法在FF算法的基础上进行修改,在剩余图中用广度优先搜索来计算第4行
增流通路p是剩余图中从s到t的最短路通路
运行开销: O ( V E 2 ) O(VE^2) O(VE2)(因为增流通路 O ( V E ) O(VE) O(VE))
更多的改进算法
最大二分图匹配
二分图G=(V,E)
V分成L和R,E中任意边的顶点分别在L和R中
匹配是E的一个子集M,对于V中的任何顶点v,M中至多有一条边以它为顶点
最大匹配即具有最大的势的匹配
最大匹配求解
从二分图G生成相应的网络流图G‘
参考:任课教师邱德红教授的课件