网络最大流问题ppt
合集下载
网络最大流

容量为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 }
10-最大流问题解析

在可增广路径的基础上计算最大流
• 最大流算法的核心是计算可增广路径
可增广路径的基本概念
• 退流的概念和弧的分类
• 若p是网络中连接源点s和汇点t的一条路,且路的方向是从 s到t的,则路上的弧有前向弧和后向弧两种。 • 前向弧:弧的方向与路的方向一致。前向弧的全体记为p+ • 后向弧:弧的方向与路的方向相反。后向弧的全体记为p-
• 流的容量限制:对于每条弧(u,v)∈E来说,弧流量为一个不大于弧容量的 非负数,即0<=f(u,v)<=C(u,v)。 • 流的平衡条件:除源点和汇点外的任意中间点u,流入u的“流量”与流出u 的“流量”相等。
(3)网络的流量V(F):指源点的净流出流量和汇点的净流入流量。
寻找网络G上可能的最大流量即为网络G上的最大流问题
在可增广路径p上改进流量
•
残留网络
• 按照上述方法对弧进行分类,初始流图中的每条弧既有容 量又有前向弧流量和后向弧流量,因此不够简洁,不方便 寻找可增广路径。 • 所谓残留网络,就是将初始流图上的前向弧的容量调整为 “剩余容量”=C(u,v)-f(u,v);后向弧的容量调整为“可退流 量”=f(v,u);去除“剩余流量”为0的弧。在这样的图上找 可增广路经变得更加容易。
可增广路径的定义
• 设F是一个可行流,p是从s到t的一条路,若p满足下述两个 条件,则称p是关于可行流F的一条可增广路径,亦称可改 进路径: • 在p+的所有前向弧(u,v)上,0<=f(u,v)<C(u,v)。 • 在p-的所有后向弧(u,v)上,0<f(u,v)<=C(u,v)。
增广路径SACBDET
最大流问题
• 在一个单源单汇的简单有向图引入流量因素,且要求计算 满足流量限制和平衡条件的最大可行流时,就产生了最大 流问题。
8.4 网络最大流问题

所有指向为vs→vt的弧,称为前向弧,记作μ +;
所有指向为vt →vs的弧,称为后向弧,记做μ
-,
增广链:设 f 是一个可行流,μ是从vs 到 vt 的一条链,若μ满 足下列条件,称之为(关于可行流 f 的)增广链。
1)在(vi , vj)∈μ+上,0≤fij<cij,即μ+中的弧都是非饱和弧。
2)在(vi,vj)∈μ-上,0<fij≤cij,即μ-中的弧都是非零流弧。
§8.4 网络最大流问题
Page 22
(3) 检查与v3点相邻的未标号的点,因f3t<c3t,故对vt 标 l(vt)=min{l(v3), c3t-f3t } =min{1, 1}= 1 找到一条增广链 vs→v1→v2 →v3 →vt ( v , 1) 2 (-v v12, 1) (4,3) v4 (3,3) (5,3) (1,1) (1,1) (3,0)
v ( f ) f s1 f s 2 f 4 t f 3 t 5
§8.4 网络最大流问题
Page 25
例8.10 用标号算法求下图中vs→vt的最大流量,并找出最小 截。 v1 9(3) v3 8(7)
5(4) 5(4)
2(0)
vs
7(5)
6(1)
●
vt
10(8) v2 9(9) v4
§8.4 网络最大流问题
基本方法: (1)找出第一个可行流(例如所有弧的流量fij =0);
Page 14
(2)用标号的方法找一条增广链:
首先给发点vs标号(0,+∞),第一个数字表示标号从哪一点得到;
第二个数字表示允许的最大调整量。
选择一个点 vi 已标号且另一端未标号的弧沿着某条链向收
网络流——求网络最大流

4 1 4 8
4 2 2 6
7
9
(1,4) V2 (0,+∞) V1
(2,4) V4 (4,4) V6
(1,8)
V3
V5 (2,1)
4 1 4 8
4 2 2 6
7
9
(-4,2) V2 (0,+∞) V1 4 4
(3,2) V4 4
(4,2) V6
(1,8)
V3
V5 (3,2)
4 1 4 8
4 2 2 6
7
9
(5,2) V2 (0,+∞) V1 2 4 4 V4 6
(5,2) V6
2
(1,6)
V3
V5 (3,2)
4 1 4 8
4 2 2 6
7
9
V2 (0,+∞) V1 4 4
4
V4
6 V6 2
2 2
(1,4)
V3
V5
存储结构
const maxn=100; type nodetype=record{可改进路顶点类型 可改进路顶点类型} 可改进路顶点类型 l,p:integer;{标号、检查标志 标号、 标号 检查标志} end; arctype=record{网顶点类型 网顶点类型} 网顶点类型 c,f:integer;{容量、流量 容量、 容量 流量} end; gtype=array[0..maxn,0..maxn] of arctype; ltype=array[0..maxn] of nodetype; var lt:ltype; g:gtype; n,s,t:integer;{顶点数、源点、汇点 顶点数、 顶点数 源点、汇点} f:text;
增广后的F
4网络最大流问题

Back
一、基本概念
(一)、网络与流
一个有向图D=(V,A,C)称为一个网络.其中, V 是D的顶点集;A是弧集;C是各弧上容量集 {cij:cij=c(vi,vj)} .在V中指定了两个顶点vs,vt,分别 称为发点和收点,其余的顶点称为中间点.
定义弧集A上的一个函数
f:(vi,vj)→f(vi,vj) 简为记网为络f的ij. (一10个,5)流v,并2 称((3f5,(,2v2)i,)vj)为弧v 5((1v1i,,6v)j)上v 6的流量,
2 、若μ是网络中联结发点vs和收点vt 的一条链,定 义链的方向是从vs到vt,则链上的弧被分为两类:一 类是弧的方向与链的方向一致,称为前向弧,前向弧 的全体记为μ+ ,另一类弧与链的方向相反,称为后 向弧,后向弧的全体记为 μ-。
3 、设f是一个可行流,μ是从vs到vt的一条链,称μ 为一条增广链,如果满足
对于发点vs,
fsj fjsv(f);
(vs,vj)A (vj,vs)A
对于收点vt,
ftj fj tv(f).
(vt,vj) A (vj,vt) A
式中 v(f) 称为一个可行流的流量,即发
点的净输出量(或收点的净输入量)
2、最大流问题
maxv( f ) f
0fijcij,(vi,vj)A
c(V1,V2)
cij
(vi,vj)(V1,V2)
定理 1 可行流 f 是最大流的充要条件是不存 在关于f的增广链. 定理2 任一个网络D=(V,A,C)中,从vs到vt的 最大流的流量等于分离vs与vt的最小截集的容 量.
Back
二、求最大流的标号法(Ford,Fulkerson) 1 、标号过程
(在 v5,v4) 是 链 (v 1 ,v 饱 2,v 3 ,v 和 4,fv 55 4, v 弧 6 c)中 54 v 1 (10,5)
一、基本概念
(一)、网络与流
一个有向图D=(V,A,C)称为一个网络.其中, V 是D的顶点集;A是弧集;C是各弧上容量集 {cij:cij=c(vi,vj)} .在V中指定了两个顶点vs,vt,分别 称为发点和收点,其余的顶点称为中间点.
定义弧集A上的一个函数
f:(vi,vj)→f(vi,vj) 简为记网为络f的ij. (一10个,5)流v,并2 称((3f5,(,2v2)i,)vj)为弧v 5((1v1i,,6v)j)上v 6的流量,
2 、若μ是网络中联结发点vs和收点vt 的一条链,定 义链的方向是从vs到vt,则链上的弧被分为两类:一 类是弧的方向与链的方向一致,称为前向弧,前向弧 的全体记为μ+ ,另一类弧与链的方向相反,称为后 向弧,后向弧的全体记为 μ-。
3 、设f是一个可行流,μ是从vs到vt的一条链,称μ 为一条增广链,如果满足
对于发点vs,
fsj fjsv(f);
(vs,vj)A (vj,vs)A
对于收点vt,
ftj fj tv(f).
(vt,vj) A (vj,vt) A
式中 v(f) 称为一个可行流的流量,即发
点的净输出量(或收点的净输入量)
2、最大流问题
maxv( f ) f
0fijcij,(vi,vj)A
c(V1,V2)
cij
(vi,vj)(V1,V2)
定理 1 可行流 f 是最大流的充要条件是不存 在关于f的增广链. 定理2 任一个网络D=(V,A,C)中,从vs到vt的 最大流的流量等于分离vs与vt的最小截集的容 量.
Back
二、求最大流的标号法(Ford,Fulkerson) 1 、标号过程
(在 v5,v4) 是 链 (v 1 ,v 饱 2,v 3 ,v 和 4,fv 55 4, v 弧 6 c)中 54 v 1 (10,5)
第四节 网络系统最大流问题

2 2
5 6
6 0
7
V6
V 8 V 10
V3
6 10
V5
前向弧: 1 min{Cij fij } 2
后向弧:
2
min{ 1 , 2 } 2
V2
8 8
5 5 3 2 5
1
V4
10 19
4
V1
2 2
5 6
6 0
7
V6
V 8 V 10
而对于实际问题来说,通常需要求最大流.
那么,如何求最大流呢? 最大流可以从任何一个可行流出发来求.
这需要下面的可扩充路的概念.
定义 6.17 设 { fij }是一组可行流,如果存在一 条从起点V1 到终点V 的路P,满足 ①在P的所有前向弧上 0 fij Cij ( fij Cij ) ( fij 0) ②在P的所有后向弧上 0 fij Cij 则称P是一条关于流 { fij }的可扩充路.
对于P的所有后向弧 (0 fij Cij ) (若P无后向弧,则令 2 ) 令 2 min{ fij }
再令 min{ 1 , 2 }
最后,构造新的可行流 { f ij }, 使得
f ij fij fij
f ij
若弧 (Vi ,Vj )不在路P上 若弧 (Vi ,Vj )是路P的前向弧 若弧 (Vi ,Vj ) 是路P的后向弧
V3 V2
8
8
6 10
V5 V4
5
1
2 5
最大流不唯一
7
3 0 6 6
19
4
V1
2 2
6 3
7
V6
5 6
6 0
7
V6
V 8 V 10
V3
6 10
V5
前向弧: 1 min{Cij fij } 2
后向弧:
2
min{ 1 , 2 } 2
V2
8 8
5 5 3 2 5
1
V4
10 19
4
V1
2 2
5 6
6 0
7
V6
V 8 V 10
而对于实际问题来说,通常需要求最大流.
那么,如何求最大流呢? 最大流可以从任何一个可行流出发来求.
这需要下面的可扩充路的概念.
定义 6.17 设 { fij }是一组可行流,如果存在一 条从起点V1 到终点V 的路P,满足 ①在P的所有前向弧上 0 fij Cij ( fij Cij ) ( fij 0) ②在P的所有后向弧上 0 fij Cij 则称P是一条关于流 { fij }的可扩充路.
对于P的所有后向弧 (0 fij Cij ) (若P无后向弧,则令 2 ) 令 2 min{ fij }
再令 min{ 1 , 2 }
最后,构造新的可行流 { f ij }, 使得
f ij fij fij
f ij
若弧 (Vi ,Vj )不在路P上 若弧 (Vi ,Vj )是路P的前向弧 若弧 (Vi ,Vj ) 是路P的后向弧
V3 V2
8
8
6 10
V5 V4
5
1
2 5
最大流不唯一
7
3 0 6 6
19
4
V1
2 2
6 3
7
V6
第五节 最大流问题

i j
2、网络流
如果在网络N=(V,A,C,x,y)中,定义在弧集上的一函 数f满足: (1)对任一条弧(vi ,vj),cij≥fij
(2)对中间顶点vk
f
i
j
ik
f kj
j
对于源x和汇y, f x j fi x fi y f y j V f
i i j
则称f为N的一个网络流(可行流)。称 Vf为f流 量。
3、最大流 网络中从x到y流值最大的可行流,称为从x到y最大 流. 一个流 f ={ fij },当fij = cij,则称流 f对边(vi ,vj) 是饱和的,否则称f 对边(vi ,vj)不饱和。 4、增广链 设P是从源x到汇y的一条链,定义P的方向是从x到 y的。称P上与P的方向一致的弧为前向弧,记 P+ . 称P上与P的方向相反的弧为反向弧,记P- . P是网络N=(V,A,C,x,y)中从源x到汇y的一条链,f为 N的一个网络流,若对任一a∈ P+ ,f(a)<c(a),对 任一a ∈ P- ,f(a)>0,则称P为N中关于流f的一条 增广链。
f(a) a p f f(a) a P f(a) 其它弧
(2)去掉所有标号,回到第一步,对可行流重新标号。
例1:用最大流算法求下图所示网络的最大流。
4.3 x v2 4.2 4.0 v3 7.2 y
1.1 6.0 8.2 2.2 9.3 2.2 v4 v5
1.1 6.0 8.2 2.2 9.3 2.2 v4 v5
x
V2(v4 ,-,2) 4.1 4.2 8.2
v3 (v2 ,+,2) 7.3 x
4.4
v2 4.1 4.2
2、网络流
如果在网络N=(V,A,C,x,y)中,定义在弧集上的一函 数f满足: (1)对任一条弧(vi ,vj),cij≥fij
(2)对中间顶点vk
f
i
j
ik
f kj
j
对于源x和汇y, f x j fi x fi y f y j V f
i i j
则称f为N的一个网络流(可行流)。称 Vf为f流 量。
3、最大流 网络中从x到y流值最大的可行流,称为从x到y最大 流. 一个流 f ={ fij },当fij = cij,则称流 f对边(vi ,vj) 是饱和的,否则称f 对边(vi ,vj)不饱和。 4、增广链 设P是从源x到汇y的一条链,定义P的方向是从x到 y的。称P上与P的方向一致的弧为前向弧,记 P+ . 称P上与P的方向相反的弧为反向弧,记P- . P是网络N=(V,A,C,x,y)中从源x到汇y的一条链,f为 N的一个网络流,若对任一a∈ P+ ,f(a)<c(a),对 任一a ∈ P- ,f(a)>0,则称P为N中关于流f的一条 增广链。
f(a) a p f f(a) a P f(a) 其它弧
(2)去掉所有标号,回到第一步,对可行流重新标号。
例1:用最大流算法求下图所示网络的最大流。
4.3 x v2 4.2 4.0 v3 7.2 y
1.1 6.0 8.2 2.2 9.3 2.2 v4 v5
1.1 6.0 8.2 2.2 9.3 2.2 v4 v5
x
V2(v4 ,-,2) 4.1 4.2 8.2
v3 (v2 ,+,2) 7.3 x
4.4
v2 4.1 4.2
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
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
s2
13
C ( V ,V ) 3 2 5 11
(4) 流量4
(3,3)
(5,3)
vs
(1,1)(1,1)(3,0)
vt
(5,1)
(2,1)
v1 (2,2) v3
最大流最小割定理: M( a f) x M v( iV n ,V ) C 11
第四节 网络最大流问题
问题 已知网络D=(V,A,C),其中V为顶点
集,A为弧集,C={cij}为容量集, cij 为弧(vi,vj ) 上的容量。现D上要通过一个流f={fij},其中fij 为弧 (vi,vj )上的流量。问应如何安排流量fij可使D上 通过的总流量v最大?
v2
4
例如:
3
vs
1
1
v2 (4,3) v4
(3,3)
(5,3)
vs
(1,1)(1,1)(3,0) vt
(5,1)
(2,1)
(2v)1 可增(值2,链2()增广v3链)
D中vs由 至 vt的, 链 记 : : 中 中的 的反 正 , 向 向 若 中 中 弧 弧 弧 弧 集 集 , 皆 皆则 非 未 为 D称 中 零 饱关于 f的
(19,11)
(4,4) -
44
(5,2)
(4+,2)
最大流最小截集的标号法举例
(9,9)
(14,14) 11
(15,10) s
33
(6,5)
(16,15)
(3,1)
(13,12) 66
2 (12,10) 55
(6,3)
(5,5)
44
(4,4)
(7,5)
(22,22)
t
(4+,2)
(19,11)
最小截集
(14,14)
11
(s+,) s (15,12)
(16,15)
(s+,3)(3,1)
(13,12) 6
– (2) (i, j)是前向弧且未饱和,则节点 j 标号为[i+,q(j)], 表示从节点 i 正向流出,可增广 q(j)=min[q(i),cijfij] ;
– (3) (j, i)是后向弧,若 fji=0,则节点 j 不标号;
– (4) (j, i)是后向弧,若 fji>0,则节点 j 标号为[i,q(j)], 表示从节点j 流向i,可增广 q(j)=min[q(i),fji] ;
v( f ) i s
• 平衡条件:
fij
f
ji
0
i s,t
v jA(vi )
v jB(vi )
v( f ) i t
• 满足上述条件的网络流称为可行流,总存在最大可行流
(1弧 ) 按流量未 饱 分饱 和 为和 弧fij 弧 : ficjij: cij 零流弧f-ij: 0
如:在前面例举的网络流问题中,若已给定一个可行流 (如括号中后一个数字所示),请指出相应的弧的类型。
一条可增值v链。 (4,3) v
(3,3) 2
4 (5,3)
vs
(1,1)(1,1)(3,0)
vt
(5,1)
v
-
(2,2) v
(2,1)
(3) 截集与截量
截集(割集 V分) 为: 二将 非空 V1与V 互 1,补 使 vs 集 V1,vt V1。
称弧 (v集 i,vj) viV1,vjV1为D的一个截集V1, ,V1)记 。为
[,v s ]vs•
(1,1)(1,10)(3,0)
• vt [1,v ] 3
[,v ] s
(5,1) 2
v1•
0 (2,2)
v• 3
(2,1) 2
[4,v ] s
[3,v ] s
[1,v ] 2
解:第一次标号及所得可增值链如图,调量q =1,调后进
行第二次标号如图。第二次标号未进行到底,得最大流如
1、对增广链中的前向弧,令 f=f+q(t),q(t) 为节点 t 的
标记值
2、对增广链中的后向弧,令 f=fq(t)
3、非增广链上的所有支路流量保持不变 第三步:抹除图上所有标号,回到第一步
-
例1 用标号法求下面网络的最大流。
[1,v ]
[1,v ]
1
2
(3,3) v2• (4,3) v•4 (5,3)
图,最大流量v=5,同时得最小截
( V ,V ) ( v,v)v , ,v) 。 (
11
s2
13
-
例2 最大流最小截集的标号法举例
(s+,)
(14,14) 11 ss (15,9)
(16,15)
(3,1)
(s+,6)
22 (12,10)
(13,12) 66
5
(6,3)
(5,5)
(6,6)
(9,9)
v4 5
3
vt
5
2
v1
-
2 v3
7.4.1 网络的最大流的概念 • 网络流一般在有向图上讨论
B(vi)
vi
A(vi)
• 定义网络上弧的容量为其最大通过能力,记为 cij ,弧 上的实际流量记为 fij
• 图中规定一个发点s,一个收点t
• 节点没有容量限制,流在节点不会存储
• 容量限制条件:0 fij cij
-
3、重复步骤 2,可能出现两种情况: (1) 节点 t 尚未标号,但无法继续标记,说明网路中已不存在 增广链,当前流 v(f) 就是最大流;所有获标号的节点在 V 中, 未获标号节点在 V 中,V 与 V 间的弧即为最小截集;算法结 束 (2)节点 t 获得标号,找到一条增广链,由节点 t 标号回溯可 找出该增广链;到第二步 第二步:增广过程
33
(2,6)
(4,3)
44
(3+,1)
(7,5)
(22,22)
tt
(19,10)
(4+,1)
(9,9)
(14,14) 11
(s+,) s (15,10)
3
(6,5)
(16,15)
(3,1)
(s+,5)
2 (12,10)
(13,12) 66 55
(22,22)
tt
(7,5)
(5,5() 2+,2)
(6,3)
(5) 最大流的判别条件
可行f是 流最大流的充D中 要不 条存 件在 是 f的 关
可增广链。
-
7.4.2 确定网络最大流的标号法
最大流最小截的标号法步骤
• 第一步:标号过程,找一条增广链
– 1、给源点 s 标号[s+,q(s)=],表示从 s 点有无限流出潜力
– 2、找出与已标号节点 i 相邻的所有未标号节点 j,若 – (1) (i, j)是前向弧且饱和,则节点 j 不标号;
截量:截集上所有弧的容量和,记C(V, 。V)
1
1
例4 对于下图,若V1={vs,v1},请指出相应的截集与截量。
v2 (4,3) v4
(3,3)
(5,3)
vs
(1,1) (1,1)
(3,0)
vt
(5,1)
(2,1)
解:
v1 (2,2) v3
( V ,V ) ( v,v)v, ,v) , (
11