网络最大流

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

调整过程 按点的第一个标号寻找一条增广链 对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 ) ∉ µ
( 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 的可行流。最大流问题就是在流量网络中, 寻找流量最大的可行流。
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) ( )
θ = min min (ci j − f i (jk −1) ) , min ( f i (jk −1) ) + −
µ µ



f i (jk )
f i (jk −1) + θ ( k −1) = fi j −θ ( k −1) fi j
(v i , v j ) ∈ µ + (v i , v j ) ∈ µ − (v i , v 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 的最短路。
容量为24 容量为
而 ( v 3 , v 2 ) 和 ( v 4 , v 5 ) 不是该集中的弧
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 } , 2′ = {v 3 , v4 , v5 , v 6 , v7 } 则截集为 (V1′,V2′) = {(v1v 3 ), (v 2 , v4 ), (v 2 , v5 )}
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 )}
µ + = {(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 ) 。
v1
(1 ,6)
v3 (2 ,5) (3 ,2)
v1 4 2
1
v3 2 3 vt
v2
3 v3
(6 ,7)
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 }
(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
可行流中 fij=cij 的弧叫做饱和弧,fij< cij的弧叫做非饱和弧。fij>0 的弧为非零 流弧,fij=0 的弧叫做零流弧。
3、容量网络G,若 µ 为网络中从vs到vt的 一条链,给 µ 定向为从vs到vt,µ 上的弧,凡与 µ 方向相同的称为前向弧 前向弧,凡与 µ 方向相反的 前向弧 称为后向弧 后向弧,其集合分别用 µ 和 µ 表示。 后向弧 f 是一个可行流,如果满足:
得到新可行流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上的一个函数 上的流, 网络 上的流,是指定义在弧集合 上的一个函数
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
+ −
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 的一条可增广链。
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
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)
5 (5) 5 (4)
v5
4 (4) 4 (3)
9 (9)
v1
v4
5 (4)
Biblioteka Baidu
v7
10 (7)
v3
v6
截集2 截集2 最小截量为: 最小截量为:9+6+5=20
( v i , v j )∈E ij ( v j , v i )∈E ji
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 3 , v6 ) 为零流弧,其余为非饱和弧。
(2 , 2) (4 ,3) (1 ,0)
v3 v4 (5 ,3) (3 ,0) (2 ,2) vt
(2 , 2)
v3
最小截集 {( v s , v1 ) , (v 2 , v 3 , v 4 , v t )}
5 (3)
v2
13 (5) 6(3) 4 (1) 5 (2) 9 (3) 5 (2)
v5
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
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
120(30) ( )
v3
第五节 最小费用最大流问题 定义8.17 已知网络G =(V,E,C,d),f是 定义 µ G上的一个可行流, 为一条从vs到vt的增广链, 称为链的费用。di d( f ) = ∑ 若 µ * 是从vs到vt的增广链中费用最小的增广链 ,则称 µ * 是最小费用增广链。 结论: 结论:如果可行流 f在流量为W(f )的所有可行 流中的费用最小,并且µ *是关于f 的所有增广 链中的费用最小的增广链,那么沿增广链 µ *调整可行流f,得到的新可行流f *也是流量为 W(f*)的所有可行流中的最小费用流。当f * 是 最大流时,就是最小费用最大流。
容量为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未被标号,而标号过程无法进 行下去,这时的可行流就是最大流。
步骤: (1)取零流为初始可行流 ,f (0) ={0}。 (2)一般地,如果在第k-1步得到最小费用流 f (k-1), 则构造图 L( f (k-1) )。 (3)在L( f (k-1) )中,寻求从vs到vt的最短路。若不存 在最短路,则f (k-1)就是最小费用最大流;否则转(4)。 (4)如果存在最短路,则在可行流f (k-1)的图中得到 与此最短路相对应的增广链,在增广链上,对f (k-1) 进行调整,调整量为:
相关文档
最新文档