16.网络最大流问题
l(vj)=min[l(vi),cij-fij],
l(vj)=min[l(vi),fji]
重复上述步骤,一旦vt被标号,则得到一条vs到vt的 增广链。若所有标号都已检查过,而vt尚未标号,结束, 这时可行流,即最大流。 (二)调整过程
从vt 开始,反向追踪,找出增广链 µ ,并在µ 上进 行流量调整。 (1)找增广链 如vt 的第一个标号为k(或-k),则弧(vk,vt) ∈µ(或弧(vt,vk) ∈µ)。检查vk 的第一个标号,若为i (或-i),则(vi,vk) ∈µ (或(vk,vi) ∈µ )。再检查vi 的第一 个标号,依此下去,直到vs 。被找出的弧构成了增广链 µ 。
5. 增广链 对可行流 f ={ fij }: 非饱和弧:fij < cij 非零流弧:fij >0 饱和弧:fij =cij 零流弧:fij =0
链的方向:若µ 是联结vs和vt的一条链,定义链的方 向是从vs到vt 。 v2 v4 5.2
10.5 3.2 4.1 5.1 3.3 11.6
v1
8.3
已检查 标号点 网络中的点 未检查 未标号点
标号:(前点标记,前点到该点的弧流量可调整量) 开始,vs 标上(0,∞),vs 是标号未检查的点, 其余点都是未标号点,一般地,取一个标号未检查 的点vi ,对一切未标号的点vj 。 (1)若弧(vi,vj)上,fij<cij,则给vj 标号(vi ,l(vj)), l(vj)=min[l (vi), cij-fij], vj 成为标号而未检查的点。 (2)若弧(vj,vi)上,fji>0,则给vj 标号(- vi, l (vj)), l (vj)=min[l (vi), fji], vj 成为标号而未检查的点。 vj vj (i , l(vj)) vi (-i , l(vj)) vi fij<cij f ji>0
v6 v5
17.2
v3
6.3
v2
10.5 3.2 4.1 5.1
5.2
v4
11.6 3.3
v1
8.3
v6 v517.2来自µ = (v1,v2,v3,v4,v5,v6 )
v3
6.3
+={(v ,v ) ,(v ,v ), (v , v ),(v ,v )} µ 1 2 2 3 3 4 5 6
µ - ={(v5,v4)}
v2
v3
6.5
v4
3.3
v5
5.4
v6
定理1 若f*是网络G=(V,A,C)上的可行流,则
可行流f*为最大的充要条件为μ中不存在关 于f*的增广链。
二、寻求最大流的标号法(Ford—Fulkerson) 从任一个可行流 f 出发(若网络中没有给定 f , 则从零流开始),经过标号过程与调整过程。 (一)标号过程
例 用标号法求下图网络的最大流。弧旁的数字是( cij , fij)。
v1
(3,3)
(5,1) (2,2) (2,2)
v3
(6,3) (2,0)
(5,2)
vs
(6,2)
vt
v2
(3,2)
v4
解: 第一轮 标号过程 (1)vs标(0,+∞),vs为已标号未检查点。 l( v2 ) min , 6 - 2 4 (2)检查vs,给v2标号(vs,l(v2)), ,vs成为已标号已检查的点,v2成为已标号未检查的点。 l( v1 ) min 4,2 2 (3)检查v2,给v1标号(-v2,l(v1)), 。同理给v4标号为(v2,1),v2成为已标号已检查的 点,v1,v4成为已标号未检查的点。 (4)检查v1,给v3标号为(v1,2),v3成为已标号未检 查的点。 (5)检查v3,给v4标号为( v3 ,2)。 因为v4已被标号,所以说明找到一条增广链。 调整过程 按点的第一个标号,以vt点开始,回溯找到一条增广 链, 如下图红线所示:
ij ( vi ,v j )A
f
ji ( v j , v i )A
f
0
js
vs : vt :
( v s ,v j )A
f
sj
( v j ,v s )A
f
V( f ) V( f )
可行流总是 存在的
( v t ,v j )A
f
tj
( v j ,v t )A
f
网络最大流问题
例 连接某产品产地vs和销地vt的交通网如下: v1 v3 4
3 5 1 5 2 1 2
vs
vt v4
v2
2
弧(vi,vj):从vi到vj的运输线,
弧旁数字:这条运输线的最大通过能力,
制定一个运输方案,使从vs到vt的产品数量最多。
v1
3
4
2
v3
5
弧旁数字:
运输能力。
vs
5
1
1
2
vt
5
v4
11 3 17
v1
弧旁数字:
容量
5
v6
v5
v3
6
v2
弧旁数字:
5 2
2
v4
6
流量
v1
3
1
1
3
2
v6
v5
v3
3
vi
v2
10.5
cij fij
5.3
3.2
vj v4
11.6 3.1
v1
8.3
4.0
5.0
v6 v5
17.4
v3
6.3
2. 可行流 定义2 满足下述条件的流 f 称为可行流: 1)容量限制条件: 对每一弧(vi , vj )∈A 0≤fij ≤cij 2)平衡条件: 对中间点vi (i≠s,t ),有
如所有fij=0,
零流。
jt
V( f ) 称为可行流 f 的流量,即发点的净输出量。
3. 最大流
若为网络可行流,且满足: V(f *)=max{V(f )∣f }为网络D中的任意 一个可行流,则称f *为网络的最大流。
4.前向弧与后向弧 设μ=(x,…,u,v,…A)是网络G中的一条初 等链并且定义链的方向是从x到A。若D中有弧 (u,v),与μ方向一致,则称(u,v)为链μ 的前向弧,若D中有弧(u,v),则称 (v, u),为链μ的后向弧。
(2)流量调整
令调整量是 l(vt),构造新的可行流 f ′,
令
f ij ' f ij f ij f ij
(v i , v j ) u (v i , v j ) u
(v i , v j ) u-
去掉所有的标号,对新的可行流 f ′={ fij′},重新进 入标号过程。
定义3 设 f 是一个可行流, µ 是从vs 到vt 的一条链,若µ 满 足下列条件,称之为(关于可行流 f 的)一条增广 链。
+ (vi , vj ) ∈ µ (vi , vj ) ∈ µ
0≤ fij <cij 0 < fij ≤ cij
6.0
前向弧是 非饱和弧, 后向弧 是非零流弧,
v1
8.4
v4
v2
2
问题:这个运输网络中,从vs到vt的最大输送量是多少?
一、基本概念与定理 1. 网络流
定义1 对于网络G=(V,A,C) ,定义在弧集合
A上的一个函数f = {f(vi ,vj)} 称为网络流,
f(vi ,vj) (简称fij)为弧aij ∈A上的流。
(a)图是一个网络
10
v2
3 4 8