网络最大流问题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
最大流PPT课件
未标号,则给v j
(i,
一个标号
(
j)
min{x ji ,
(i)})
.
2.3 如果t已被标号,转3,否则转2.1.
.
12
Ford-Fulkerson算法
3. 根据得到的增广路上各顶点标号来增加流 量,抹去s外所有顶点标号,转2. 4. 此时当前流是最大流,且把所有标号点集 记为 S,则(S, S) 就是最小割.
0,f,vvi i
s s,
t
v jV
v jV
f,vi t
• 目标: max f xs*j x*jt
j
j
.
3
• 最大流问题的线性规划模型:
max f
s.t. xij f , vi t
vj
vj
xij x ji 0, vi s,t
.
5
3,1 s
2,2
3,2 s
2,2
v1 2,1 1,0
v3 2,2 v1 2,2
1,0 v3 2,2
v2 3,2
1,1
t
2,1 v4 v2
3,2
1,0
t
2,2 v4
.
6
• 一个弧割 (S, S) 若满足s S,t S ,则称为(s,t) 割,其
容量定义为C(S, S) cij . viS v jS
• 标号过程中,增加先标号先检查的原则.
.
16
• 整数假设 • 实数包含有理数和无理数. • 有理数就是分数,扩大若干倍可以变成整
数. • 而对于无理数,Ford和Fulkerson[1962]证
明了算法会收敛到一个不是最大流的流值. • 现实中流量是不会出现无理数的.
8.4_最大流问题
v3 ( v s ,1)
则称弧
集 (V1 , V1 ) 为分离发点 v s 和收点 v t 的割集(截集).
• 给定一割集 (V1 , V1 ) ,割集(V1 , V1 ) 中所有弧的容量之和称为
此割集的容量,简称割量,记作 C (V1 , V1 ),即
C (V1 , V1 )
( v i , v j ) ( V1 ,V1 )
的方向为 v s v t ,则链上的弧被相应地分为两类:
前向弧:弧的方向与链 的方向一致.
{前 向 弧 }
的方向相反. {后 向 弧 } 后向弧:弧的方向与链
• 设f 是一可行流, 是从 v s 到 v t 的一条链, 若 满足:
1) 上前向弧均为非饱和弧 ( v i , v j ) , 0 fij cij .
15
( v1 , v 2 ), ( v 3 , v 5 ) ( v 2 , v 4 ), ( v 2 , v 5 ), ( v 3 , v 5 )
( v1 , v 3 ), ( v 2 , v 3 ), ( v 2 , v 5 ), ( v 4 , v 5 ), ( v 4 , v 6 )
A
且 且
f ij c ij
,则令 j ,则令 j
m in { c ij f ij , i } ,
给 v j 标号( v i , j ) ,否则不标号.
A
f ij 0
m in { f ij , i } ,
给 v j 标号( v i , j ) ,否则不标号.
f
*
是最大流的充要条件是不存在关于流
的增广链.
网络最大流问题
以经过调整,得到一个新的可行流,其流量比原来的可
行流要大,重复这个过程,直到不存在关于该流的增广 链时就得到了最大流。
寻求最大流的思路:利用定理1中对V1*定义,根据vt是 否属于V1*来判断D中有无关于f的增广链。 实际计算时,可以用给顶点标号的方法来确定属 于V1*的点。
在标号过程中,有标号的顶点表示是V1*中的点,
l(v3) = min[l(v2), f32]=min[1, 1]=1
v2 (-v1,1) (4,3) (3,3) (0,+∞) vs (5,1) v1 (vs,4) (2,2) v4 (v2,1) (5,3) (3,0) (2,1) v3 (-v2,1) vt
(1,1)
(1,1)
(5) 在v3, v4中任选一个进行检查。
v4 (v2,1) (5,3)
(3,0) (2,1) v3 (-v2,1) vt (v4,1)
(二) 调整过程 (1) 按点的第一个标号找到一条增广链。
v2 (-v1,1) (4,3) (3,3) v4 (v2,1) (5,3)
(0,+∞) vs
(5,1)
(1,1)
(1,1)
(3,0)
(2,1)
vt (v4,1)
(2)未标号点。
标号过程: (1) 给发点 vs 标上 (0 , +∞) ;这时 vs 是标号而未检查
的点,其余都是未标号点。
(2) 取一个标号而未检查的点 vi,对于vi的所有未给 标号的相邻点vj按下列规则处理: (a)若在弧(vi,vj) 上,fij<cij,则给vj标号(vi,l(vj))。这 里l(vj)=min[l(vi), cij-fij]。这时点vj成为标号而未检查的点。 (b) 若在弧 (vj,vi)上, fji>0 ,则给 vj 标号 (-vi , l(vj)),这 里l(vj)=min[(l(vi),fij]。这时点vj成为标号而未检查的点。 这样,vj成为标号而已检查过的点。
最大流算法
◆每条弧 ( u, v )上 给定一个实数f(u,v),满足:有 0 <= f ( u, v ) <= c( u, v ),则f(u,v)称为弧( u, v )上的流量。
◆如果有一组流量满足条件: 源点s : 流出量 = 整个网络的流量 汇点t : 流入量 =整个网络的流量 中间点:总流入量 = 总流出量
2 ) 对与该增广路径上的边 若( u, v ) 是正向边,f ( u, v ) = f ( u, v ) + d; 若( u, v ) 是逆向边,f ( u, v ) = f ( u, v ) – d;
增广后,总流量增加了d
样例:
4
1
6
23
2
34
开始流量为:sum=0
4
5
5
23
4
4
1
2
5
6
34
5
4 23 4
1 2 22
5
6
3
4
2
5
1、一条增广路径: 1235 d=min{4,2,4} =2 增加流量: 2 Sum=2
4 23 4
1
2
22
5
6
3
4
2
5
2 32
1
4
2
2
22
4
2
5
6
34
5
2
2、一条增广路径: 1245 d=min{4-2,3,5} =2 增加流量: 2 Sum=2+2=4
2 32
i:=b[i];
ห้องสมุดไป่ตู้
end;
inc(sum,d); {总流量增加d}
主程序:
for i:=1 to n do b[i]:= -1; {初始化增广路径} b[1]:=0; while findflow(1) do {增广流}
◆如果有一组流量满足条件: 源点s : 流出量 = 整个网络的流量 汇点t : 流入量 =整个网络的流量 中间点:总流入量 = 总流出量
2 ) 对与该增广路径上的边 若( u, v ) 是正向边,f ( u, v ) = f ( u, v ) + d; 若( u, v ) 是逆向边,f ( u, v ) = f ( u, v ) – d;
增广后,总流量增加了d
样例:
4
1
6
23
2
34
开始流量为:sum=0
4
5
5
23
4
4
1
2
5
6
34
5
4 23 4
1 2 22
5
6
3
4
2
5
1、一条增广路径: 1235 d=min{4,2,4} =2 增加流量: 2 Sum=2
4 23 4
1
2
22
5
6
3
4
2
5
2 32
1
4
2
2
22
4
2
5
6
34
5
2
2、一条增广路径: 1245 d=min{4-2,3,5} =2 增加流量: 2 Sum=2+2=4
2 32
i:=b[i];
ห้องสมุดไป่ตู้
end;
inc(sum,d); {总流量增加d}
主程序:
for i:=1 to n do b[i]:= -1; {初始化增广路径} b[1]:=0; while findflow(1) do {增广流}
网络最大流问题
中弧皆未饱 ,则称为D中关于可行流
中弧皆非零
f的
一条可增值链。
v2 (4,3) v4
(3,3)
(5,3)
vs
(1,1) (1,1)
(3,0)
vt
(5,1)
v1 (2,2)
(2,1)
v3
v2 (4,3)
v4
(3,3)
(5,3)
vs
(1,1) (3,0)
vt
(1,1)
(5,1)
v1
(2,2)
(2,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)
8(8)
2(0)
s
5(4)
(0, )
7(5)
9(9)
v2 (s,2)
v3 (v1,2)
5(5)
6(1)
10(8)
v4 (v3 ,1)
t (v4,1)
v1(v2 ,1) 9(5)
v3 (v1,1)
8(8)
s
5(3)
(0, )
7(6)
v2 (s,1)
5(5)
2(0)
6(0)
9(9)
k
10(9)
v4 (v3 ,1)
中国邮递员问题用图论的观点来看就是: 在 一个赋权连通图中,找一个过每边至少一次的闭链 (圈),并且使闭链的权最小。它的算法与一笔画 问题有关。
最大流-最小割PPT课件
那么j属于S。 //否则不是最小割。 即,从s出发能找到的含有残留的点组成集合S,其余 的点组成集合T。
11
.
形象的比喻:
水流管道的最大流量由最细的管子容量决定。 网络的最大流量由最小割决定。
12
从S指向T的割边是正向割边。 从T指向S的割边是逆向割边。
割CUT(S,T)中所有正向割边的容量和,称为割CUT (S,T)的容量。不同割的容量不同。
最小割,就是指所有割中权重之和最小的一个割。
5.6源自 .7.网络流和割的关系
定理一: 如果f是网络中的一个流,CUT(S,T)是任意一个割,那
么f的值等于正向割边的流量与负向割边的流量之差。
推论一: 如果f是网络中的一个流,CUT(S,T)是一个割,那么f
的值不超过割CUT(S,T)的容量。 推论二: 网络中的最大流不超过任何割的容量。
8
.
定理二: 在网络中,如果f是一个流,CUT (S,T)是一个割,且f
的值等于割CUT(S,T)的容量,那么f是一个最大流, CUT(S,T)是一个最小割。
9
.
最大流最小割定理
在任何网络中,最大流的值等于最小割的容量。
10
.
结论一: 最大流时,最小割cut(S,T)中,正向割边的流量=容量,
逆向割边的流量为0。
结论二: 在最小割cut(S,T)中: 1.源点s属于S 2.如果i属于S,结点j满足: 有弧<i,j>,并且c [i,j] >f [i,j] ,或者有弧<i,j>,并且f [i,j] >0,
s-t切割的代价 1. S,T的容量是所有容量函数的总和 2. 最小割是S-T切割中所有可能的S-T切割的能量最
小的割 跨越S-T切割的流值是所有f(i,j)-f(j,i)的值
11
.
形象的比喻:
水流管道的最大流量由最细的管子容量决定。 网络的最大流量由最小割决定。
12
从S指向T的割边是正向割边。 从T指向S的割边是逆向割边。
割CUT(S,T)中所有正向割边的容量和,称为割CUT (S,T)的容量。不同割的容量不同。
最小割,就是指所有割中权重之和最小的一个割。
5.6源自 .7.网络流和割的关系
定理一: 如果f是网络中的一个流,CUT(S,T)是任意一个割,那
么f的值等于正向割边的流量与负向割边的流量之差。
推论一: 如果f是网络中的一个流,CUT(S,T)是一个割,那么f
的值不超过割CUT(S,T)的容量。 推论二: 网络中的最大流不超过任何割的容量。
8
.
定理二: 在网络中,如果f是一个流,CUT (S,T)是一个割,且f
的值等于割CUT(S,T)的容量,那么f是一个最大流, CUT(S,T)是一个最小割。
9
.
最大流最小割定理
在任何网络中,最大流的值等于最小割的容量。
10
.
结论一: 最大流时,最小割cut(S,T)中,正向割边的流量=容量,
逆向割边的流量为0。
结论二: 在最小割cut(S,T)中: 1.源点s属于S 2.如果i属于S,结点j满足: 有弧<i,j>,并且c [i,j] >f [i,j] ,或者有弧<i,j>,并且f [i,j] >0,
s-t切割的代价 1. S,T的容量是所有容量函数的总和 2. 最小割是S-T切割中所有可能的S-T切割的能量最
小的割 跨越S-T切割的流值是所有f(i,j)-f(j,i)的值
相关主题
- 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