网络最大流
容量为20 容量为
• 最小截集: • 容量最小截集的称为网络G的最小截集。 • 最大流-最小截集定理: • 在任一个网络D中,从vs到vt的最大流的 流量等于分离的最小截集的容量。
(二)、 求最大流的标号法
标号过程: 1. 给发点vs 标号(0,+∞)。 2. 取一个已标号的点vi,对于vi一切未标号的邻 接点vj 按下列规则处理: (1)如果边 (v j , vi ) ∈ E ,且 f j i > 0 ,那么给vj 标 号 (−vi , δ j ) ,其中: δ j = min( f j i , δ i ) (2)如果边 (vi , v j ) ∈ E ,且 f ij < cij,那么给vj 标号 ( +vi , δ δ j = min(ci j − f i j , δ i ) ,其中:j ) 3.重复步骤2,直到vt被标号或标号过程无法进 行下去,则标号结束。若vt被标号,则存在一条增广 链,转调整过程;若vt未被标号,而标号过程无法进 行下去,这时的可行流就是最大流。
2.去掉所有标号,回到第一步,对可行流 重新标号。
求下图所示网络中的最大流,弧旁数为
v2 (3 , 3) vs (5 , 1) (1 , 1) v1 (-v1, 1) ) v2 (3 , 3) (0,+∞) , ) vs (5 , 1) v1 (+ vs , 4) ) (2 , 2) (1 ,1) (1 , 1) (3 ,0) (2 ,1) v3 (-v2 ,1) ) (2 , 2) (4 ,3) (1 ,1) (3 ,0) (2 ,1) v3 (+v2,1) ) v4 (5 ,3) v4 (5 ,3) vt
f = f (v i , v j ) = { f i j }
{
}
其中f(v 叫做弧(v 上的流量 其中 i ,vj) =fij 叫做弧 i,vj)上的流量。 上的流量。
2、称满足下列条件的流为可行流: (1)容量条件:对于每一个弧(vi ,vj)∈E 有 0 δ fij δ cij 。 (2)平衡条件: 对于发点vs,有 ∑ f − ∑ f = W
+ −
0 ≤ f i j < ci j 0 < f i j ≤ ci j
(v i , v j ) ∈ µ + (v i , v j ) ∈ µ −
µ + 中的每一条弧都是非饱和弧 即 µ − 中的每一条弧都是非零流弧 即
则称 µ 为从vs到vt 的关于f 的一条可增广链 。 推论 可行流f 是最大流的充分必要条件是不存 在从vs到vt 的关于f 的一条可增广链。
可行流中 fij=cij 的弧叫做饱和弧,fij< cij的弧叫做非饱和弧。fij>0 的弧为非零 流弧,fij=0 的弧叫做零流弧。
3、容量网络G,若 µ 为网络中从vs到vt的 一条链,给 µ 定向为从vs到vt,µ 上的弧,凡与 µ 方向相同的称为前向弧 前向弧,凡与 µ 方向相反的 前向弧 称为后向弧 后向弧,其集合分别用 µ 和 µ 表示。 后向弧 f 是一个可行流,如果满足:
容量为24 容量为
而 ( v 3 , v 2 ) 和 ( v 4 , v 5 )3 (5) 6(3) 4 (1) 5 (2) 9 (3) 5 (2)
v5
4 (2) 4 (1) 5 (0)
9 (5)
v1
v4
v7
10 (1)
v3
v6
V 设 V1′ = {v1 , v 2 } , 2′ = {v 3 , v4 , v5 , v 6 , v7 } 则截集为 (V1′,V2′) = {(v1v 3 ), (v 2 , v4 ), (v 2 , v5 )}
得到新可行流f (k) 。对f (k)重复上面步骤,返回(2)。 例8.11 求网络的最小费用最大流,弧旁权是(bij , cij)
v1 (4 ,8) (2 ,3) vs (1 ,4) v2 (3 ,2) (6 ,7) vt (1 ,6) v3 (2 ,5)
v1 (4 ,8) (2 ,3) vs (1 ,4)
四、 最大流问题 (一)、 基本概念
1、设一个赋权有向图D=(V, E),在V中指定一个发点 、设一个赋权有向图 在 中指定一个发点 vs和一个收点 t ,其它的点叫做中间点。对于 中的每一个 和一个收点v 其它的点叫做中间点 对于D中的每一个 其它的点叫做中间点。 都有一个非负数c 叫做弧的容量。 弧(vi , vj)∈E ,都有一个非负数 ij,叫做弧的容量。我们 都有一个非负数 叫做弧的容量 把这样的图D叫做一个容量网络 简称网络 叫做一个容量网络, 网络, 把这样的图 叫做一个容量网络,简称网络,记做 D=(V,E,C)。 ) ( 网络D上的流 是指定义在弧集合E上的一个函数 上的流, 网络 上的流,是指定义在弧集合 上的一个函数
( v s , v j )∈E sj ( v j , v s )∈E js
对于收点vt ,有 ∑
( v t , v j )∈E
ft j −
( v j , v t )∈E
∑f
jt
= −W
对于中间点,有 ∑ f − ∑ f = 0 W为网络流的总流量。 可行流总是存在的,例如f={0}就是流量为0 的可行流。最大流问题就是在流量网络中, 寻找流量最大的可行流。
µ + = {(v1 , v 2 ), (v 3 , v 6 ), (v 6 , v 7 )} µ − = {(v 3 , v 2 )}
µ
是一个增广链
显然图中增广链不止一条
4、容量网络D =(V,E,C),vs为始点, vt为终点。如果把V分成两个非空集合 S , S 使 v ∈ S , v ∈ S ,则所有始点属于 ,而终 所有始点属于S, 所有始点属于 的弧的集合, 点属于 S 的弧的集合,称为由S决定的截集, 记作 ( S , S )。截集 ( S , S ) 中所有弧的容量之和, 称为这个截集的容量,记为 C ( S , S ) 。
7 vs 3 S
v1 4
5 5 6
v3 7 3 8 v4 vt
v2
5 (3)
v2
13 (5) 6(3) 4 (1) 5 (2) 9 (3) 5 (2)
v5
4 (2) 4 (1) 5 (0)
9 (5)
v1
v4
v7
10 (1)
v3
v6
V 设 V1 = {v1 , v 2 , v5 } , 2 = {v 3 , v4 , v 6 , v7 } 则截集为 (V1 ,V2 ) = {(v1v 3 ), (v 2 , v4 ), (v5 , v 7 )}
调整过程 按点的第一个标号寻找一条增广链 对vt,,按逆方向进行调整,下式中的 δ 为δ t
fi j + δ 1.令 f i′j = f i j − δ fi j (v i , v j ) ∈ µ + (v i , v j ) ∈ µ − (v i , v j ) ∉ µ
70(70) ( )
v1
50(50) ( ) 50(20) ( )
vt1 ∞ (150 ) v t
∞ (200 )
v s1
70(50) ( ) ∞ (120 ) 130(100) ( )
( ) v2 150(150) 100(100) ( )
vt 2
vs
∞ (230 ) vs 2 150(130) ( )
(c i j , f i j )
(4 ,3)
(+ v ,1) vt 3
v2 (3 , 3) vs (5 , 2) (1 , 0) v1 v2 (3 , 3) (0,+∞) , ) vs (5 , 2) (1 , 0) v1 (+ vs , 3) )
(4 ,3) (1 ,0)
v4 (5 ,3) (3 ,0) (2 ,2) vt
u+
寻找关于f 的最小费用增广链: 构造一个关于f 的赋权有向图L(f ) ,其顶点是 原网络G的顶点,而将G中的每一条弧 ( vi, vj )变成两 个相反方向的弧(vi, vj)和(vj , vi),并且定义图中 弧的权lij为: 1.当 (vi , v j ) ∈ E ,令 d i j 当 f i j < c i j
li j = + ∞ 当 f i j = ci j
2.当(vj,vi)为原来网络G中(vi, vj)的反向弧, 令 − d i j 当 f i j > 0
l ji = + ∞ 当 fi j = 0
在网络G中寻找关于f 的最小费用增广链等价于 在L(f )中寻求从vs 到vt 的最短路。
5 (3)
v2
13 (5) 6(3) 4 (1) 5 (2) 9 (3) 5 (2)
v5
4 (2) 4 (1) 5 (0)
9 (5)
v1
v4
v7
10 (1)
v3
v6
µ = {v1 , (v1 , v 2 ), v 2 , (v 3 , v 2 ), v 3 , (v 3 , v 6 ), v 6 , (v 6 , v 7 ), v 7 }
s t
S = ( v s , v 2 ) S = ( v1 , v 3 , v 4 , v t ) ( S , S ) = {(v s , v1 ) , (v 2 , v4 ) , (v 2 , v 3 )} C ( S , S ) = l s1 + l 24 + l 23 = 7 + 6 + 5 = 18
4 (2) 4 (1) 5 (0)
9 (5)
v1
v4
v7
10 (1)
v3
v6
截集1 截集1
v2
13 (11) 6(6) 4 (0) 5 (5) 9 (9)