流量守恒:流入a结点的=流出a结点的
1、定义
流网络:G=(V,E),是一个有向图。连通的,对于每个结点
v
∈
V
v\in V
v∈V,流网络都包含一条路径
s
~
v
~
t
s~v~t
s~v~t,且除了源结点外的每个结点都至少有一条进入的边,所以
∣
E
∣
≥
∣
V
∣
−
1
|E|\geq|V|-1
∣E∣≥∣V∣−1。
容量值:图中每条边有一个非负的容量值c(u,v)。
源节点:s
汇点:t
流的形式化定义:
流的性质:(证明是一个流就要证明这两点)
容量限制就是说,结点之间的流必须是非负值并且不能超过给定的容量限额。流量守恒是说流入等于流出。
流
f
f
f的值
∣
f
∣
|f|
∣f∣:
∣
f
∣
=
∑
v
∈
V
f
(
s
,
v
)
−
∑
v
∈
V
f
(
v
−
s
)
|f|=\sum_{v\in V}f(s,v)-\sum_{v\in V}f(v-s)
∣f∣=∑v∈Vf(s,v)−∑v∈Vf(v−s)。流的值是从源结点流出的减去流入源结点的值。 因为源结点没有流入的边,所以后一项为0。
2、解决最大流问题的Ford_Fulkerson方法
思想:
1)残存网络
残存网络
G
f
G_f
Gf 由那些仍有空间对流量进行调整的边构成。
如果某条边的流量没有小于该边的容量,则可以把这条边置于
G
f
G_f
Gf中,其残存容量为:
c
f
(
u
,
v
)
=
c
(
u
,
v
)
−
f
(
u
,
v
)
c_f(u,v)=c(u,v)-f(u,v)
cf(u,v)=c(u,v)−f(u,v),边的流量等于容量时不属于残存网络。
允许包含G中不存在的边,如要减少
f
(
u
,
v
)
f(u,v)
f(u,v),可以增加边
f
(
v
,
u
)
f(v,u)
f(v,u),
f
(
v
,
u
)
f(v,u)
f(v,u)最多能把
f
(
u
,
v
)
f(u,v)
f(u,v)抵消。这等同于缩减
f
(
u
,
v
)
f(u,v)
f(u,v)的流量。
残存容量
c
f
(
u
,
v
)
c_f(u,v)
cf(u,v)定义如下:
这个图表示了增大流的方法,先将(a)写成残存网络的形式,计算方法为式(26.2),然后找增广路径中最小的流量,加到(a)中这条路径上。再找残存网络……直至没有增广路径。
引理:
证明:
2)增广路径
增广路径:是残存网络中一条中源结点到汇点的简单路径。
路径p的残存容量:
c
f
(
p
)
=
min
c
f
(
u
,
v
)
:
(
u
,
v
)
属
于
路
径
p
c_f(p)=\min{c_f(u,v):(u,v)属于路径p}
cf(p)=mincf(u,v):(u,v)属于路径p
下述引理和推论证明将流增大
f
p
f_p
fp的量,该流的值会更加接近最大值。
3)流网络的切割
流网络
G
=
(
V
,
E
)
G=(V,E)
G=(V,E)的切割
(
S
,
T
)
(S,T)
(S,T),将结点集合
V
V
V划分为
S
S
S和
T
=
V
−
S
T=V-S
T=V−S两个集合,使得
s
∈
S
,
t
∈
T
s\in S,t\in T
s∈S,t∈T。
若
f
f
f是一个流,则定义横跨切割
(
S
,
T
)
(S,T)
(S,T)的净流量
f
(
S
,
T
)
f(S,T)
f(S,T)如下:
f
(
S
,
T
)
=
∑
u
∈
S
∑
v
∈
T
f
(
u
,
v
)
−
∑
u
∈
S
∑
v
∈
T
f
(
v
,
u
)
f(S,T)=\sum_{u\in S}\sum_{v\in T}f(u,v)-\sum_{u\in S}\sum_{v\in T}f(v,u)
f(S,T)=u∈S∑v∈T∑f(u,v)−u∈S∑v∈T∑f(v,u)
切割的容量是:
c
(
S
,
T
)
=
∑
u
∈
S
∑
v
∈
T
c
(
u
,
v
)
c(S,T)=\sum_{u\in S}\sum_{v\in T}c(u,v)
c(S,T)=u∈S∑v∈T∑c(u,v)
对于流来说,我们考虑的是从S到T的流量减去从T到S反方向的流量。
而对于容量来说,我们考虑的只是从S出发进入集合T的容量。
横跨切割的净流量是:
f
(
v
1
,
v
3
)
+
f
(
v
2
,
v
4
)
−
f
(
v
3
,
v
2
)
=
12
+
11
−
4
=
19
f(v_1,v_3)+f(v_2,v_4)-f(v_3,v_2)=12+11-4=19
f(v1,v3)+f(v2,v4)−f(v3,v2)=12+11−4=19
切割的容量:
c
(
v
1
,
v
3
)
+
c
(
v
2
,
v
4
)
=
12
+
14
=
26
c(v_1,v_3)+c(v_2,v_4)=12+14=26
c(v1,v3)+c(v2,v4)=12+14=26
下面的引理表示无论是什么样的切割,通过的净流量都是等于
∣
f
∣
|f|
∣f∣,即流的值。
下面的推论说明:流网络中最大流的值不能超过该网络最小切割的容量。
接下来的最大流最小切割定理表明:最大流的值实际上就是等于最小切割的容量。
3、基本的Ford-Fulkerson算法
复杂度分析:
一个例子:
参考:
算法导论第三版