第八章(续)-最大流问题
《运筹学最大流问题》课件
实际应用效果:在实际应用中,最大流问题可以有效地解决物流运输中的路径规划、车辆调度等问 题,提高物流运输效率,降低运输成本。
网络流量优化中的最大流问题
背景:随着互联网 技术的发展,网络 流量优化成为重要 问题
预流推进法的实现
预流推进法是一种求解最大流问题的算法 基本思想:通过寻找增广路径,逐步增大流值
实现步骤:初始化、寻找增广路径、更新流值、重复以上步骤直到找不到增广路径
优点:效率较高,适用于大规模网络流问题
Dinic算法的实现
初始化:设置源 点s和汇点t,初 始化网络流网络
寻找增广路径: 使用BFS寻找从 s到t的增广路径
汇报人:
EdmondsKarp算法等
扩展问题:最小 费用最大流问题 的扩展问题包括 最小费用最大流 问题、最小费用 最大流问题等。
多终端最大流问题
定义:在一个网络中,有多个源点和多个汇点,每个源点和汇点之间都有一条或多条边相连,每条边上都有一个容 量限制,求从源点到汇点的最大流量。
应用场景:多终端最大流问题在物流、交通、网络等领域有广泛的应用。
电力分配中的最大流问题
电力分配:将电力从发电站分配到各个用户 最大流问题:在电力分配中,需要找到一种最优的分配方案,使得电力分配达到最大 实际应用:在实际电力分配中,可以使用最大流算法来寻找最优的分配方案 应用效果:使用最大流算法可以大大提高电力分配的效率和准确性,降低电力损耗和成本
感谢您的观看
更新流量:沿 着增广路径更 新流量
重复步骤2和3, 直到找不到增 广路径
输出最大流值: 计算从s到t的 最大流值
Ford-Fulkerson算法的实现
运筹学 第八章 图论 - 全
(a)明显为二部图,(b)也是二部图,但不明显,改画为(c) 时即可看出。
2017/7/13 11
图与网络的基本知识
次,奇点,偶点,孤立点 与某一个点vi相关联的边的数目称为 点vi的次(也叫做度),记作d(vi)。 右图中d(v1)=4,d(v3)=5,d(v5)=1。次 为奇数的点称作奇点,次为偶数的
2017/7/13
18
图与网络的基本知识
有向图 无向图
道路
回路
链
圈
道路(边的方向一致)
2017/7/13 19
图与网络的基本知识
连通图
定义10 一个图中任意两点间至少有一条链相连,则称此图为 连通图。任何一个不连通图总可以分为若干个连通子图,每 一个称为原图的一个分图(连通分支)。
连通图
2017/7/13
边,对余下的图重复这个步骤,直至无圈为止。
2、避圈法:每次增加一条边,且与已有边不构成圈,直至恰 有n-1条边为止。
2017/7/13
24
树
例1、下图是某建筑物的平面图,要求在其内部从每一房间都能走到 别的所有的房间,问至少要在墙上开多少门? 试给出一个开门的方案。
三
七
Байду номын сангаас
三 八 一 四 二 五
七 八 九 六
无向图
2017/7/13
有向图
8
图与网络的基本知识
环, 多重边, 简单图 如果边e的两个端点相重,称该边为 环。如右图中边e1为环。如果两个点 之间边多于一条,称为多重边,如右
v2 e5
多重边
e2
e1 v1
环
e3 v3
e4
图中的e4和e5,对无环、无多重边的
图论最大流问题.ppt
若 ( x, y)是向前边,fx y cxy; ( y, x) 是后前边,
f yx 0 由定理1, max w min c(S, S )
c(S, S) c(e)
e( S ,S )
网络N中容量最小的割 (S* , S* ) 称为N的最小割。
不难证明,任何一个可行流的流量w都不会超过 任一割的容量,即
w c(S, S)
例如,图2中,若 S {s},(S, S ) {(s, v3 ),(s, v2 )} c(S, S ) 4 3 7.
二、可行流与最大流
1. 定义
在实际问题中,对于流有两个显然的要求:一是 每个弧上的流量不能超过该弧的最大通过能力(即弧 的容量);二是中间点的流量为0,源点的净流出量 和汇点的净流入量必相等。因此有定义如下。
定义2 网络N中每条边都给定一个非负实数fij满足 下列条件
(1)容量约束:0≤fij≤cij,(vi,vj)∈E, (2)守恒条件
过修改,使得整个网络的流值增大。 定义3 设f是一个可行流,P是从源点s到汇点t的一
条路,若P满足下列条件: (1)在P上的所有前向弧(vi→vj)都是非饱和弧,即
0≤fij<cij; (2)在P上的所有后向弧(vi←vj)都是非零弧,即
0<fij≤cij。则称P为(关于可行流f的)一条可增广路 径。
a
第1条可增路s,c,b,t, =2
(1,0) s (2,0)
(1,0)
第2条可增路s,a,b,c,d,t,
(2,0)
t
c (2,0) b
(1,0)
(1,0)
最大流问题
例:在下面的有向图中1是发点, 6是收点,求最大流.
2 1 4
4 2
定理2. 容量网络的最大流不大于任一割集的割集容量.
(最大流--最小割)定理3. 容量网络的最大流等于最小割的割集容量.
证明:设f*是一个最大流,流量为F, 定义顶点集V的子集S*如下:
发点属于S*;若i点属于S*, 且弧(i,j)是非饱和弧,则j点属于S*;
若j点属于S*, 且弧(i,j)是非零流弧,则i点属于S*.
1 2 4 2 6
5 6
3 3 5
定义7: 设容量网络G=(V,A,c)的顶点集V是两个不交的部分S, S'的併集, 使得发点在S中,收点在S'中. 若A'是A的最小的子集,使得G中去掉A'后成为两个不相交的子图G1(S,A1),G2(S',A2), 分别以S, S'为顶点集,则称A'是关于(S,S')的割集,记为A'=(S,S'). 割集A'中所有始点在S,终点在S'的弧的容量之和称为割集(S,S')的割集容量,记为C(S,S'). 对于不同的S和S'就有不同的割集,其中割集容量最小的割集称为容量网络G的最小割集(简称最小割). 易知:
(3) 若收点n没有被标号,对i点的标记中+,- 号加圈,表示i点已检查。转(2). 否则令j=n. 进入以下调整过程
(4) 若j点的标记为正, 即(i,+ ,d(j)), 令fij=fij+d(n), 否则fji=fji-d(n)
(5) 若j=1, 去掉全部标记, 转(1), 否则转(4).
1. 每条前向弧是非饱和弧,2. 每条后向弧是非零流弧.
最大流问题
v1
v0
v2
vn
v1
v0
v2
vn
V0——V1——Vn
v1
v0
v2
vn
v1
v0
v2
vn
V0——V1——Vn
v1
v0
v2
vn
V0——Vn
v1
v0
v2
vn
v1
v0
v2
vn
v1
v0
v2
vn
V0——V1——V2——Vn
v1
v0
v2
vn
v1
v0
v2
vn
V0——V2——Vn
v1
v0
v2
vn
v1
f(i,j)+ (P)
f(i,j)= f(i,j)- (P)
(vi,vj)是前向弧
(vi,vj)是后向弧
f(i,j)
其他
新流f(i,j)的流值为 :f= f + (P)
称f为基于P的修改流;
显然 f> f
定理:当且仅当N中不包含 f 增长道 路时,N中的流 f 是最大流。
算法的基本思想:
1 从任一已知流(如零流)开始,递推 地构造一个其值不断增加的流的序列。 2 在每一个新流构成之后,如果N有f 的可增长道路,则f不是最大流。 3 可得基于P的修改流f,并作为递增流 序列的下一个流,如果不存在f 可增长 道路,则f 是最大流,停止,否则重复。
v1 b
v0
v2
vn
截集b:v1vn,v2vn,v0vn
v1
v0
v2
vn
c
截集c:v1vn,v1v2,v2v1,v0v2 ,v0vn
最大流问题
v3 5(5)
6(1) vt
fn cn
10(8)
v4
ij
cij
fij
fij
(vi , v j ) (vi , v j )
min{ij} 0
f
'
fij fij
fij
v( f ') v( f )
(vi , v j ) (vi , v j )
非增广链上的弧
v cij=5
1 fij=3
v2
(v1,v2)是不饱和的 间隙为12=c12-f12=5-3=2
弧关于流的分类
设f { fij} 是网络D=(V,A,C)的一个可行流
3、如果fij=0,该弧是0流弧;
v cij=5
1 fij=0
v2
(v1,v2)是0流弧
4、如果fij>0,该弧是非0弧;
v cij=5
流网络比较适合用来模拟液体流经管道、电流在电路网络中的运动、信息 网络中信息的传递等等类似的过程。
50年代福特(Ford)、富克逊(Fulkerson)建立 的“网络流理论”,是网络应用的重要组成部分。
问题的提出
在一个输油管网中,有生产石油的油井、储存石油的油库、转运石油的中间 泵站,同时,还有各种口径不同的输油管。当一个输油管网给定后,单位时间内 最多可把多少石油从油井输送到油库?具体方案如何?
常称为如最果大我流们问把题v3,边v4上的数表示该管道的最
大输油能力,问应该如何安排各管道输油量,才能
使从 v到s 的vt总输油量最大?
9
8
v1
2
vs 5
7
v2
9
v3 5
6 vt
10
v4
最大流问题的几种经典解法综述
最⼤流问题的⼏种经典解法综述⼀、什么是最⼤流问题假设现在有⼀个地下⽔管道⽹络,有m根管道,n个管道交叉点,现在⾃来⽔⼚位于其中⼀个点,向⽹络中输⽔,隔壁⽼王在另外⼀个点接⽔,已知由于管道修建的年代不同,有的管道能承受的⽔流量较⼤,有的较⼩,现在求在⾃来⽔⼚输⼊的⽔不限的情况下,隔壁⽼王能接到的⽔的最⼤值?为解决该问题,可以将输⽔⽹络抽象成⼀个联通的有向图,每根管道是⼀条边,交叉点为⼀个结点,从u流向v的管道能承受的最⼤流量称为容量,设为cap[u][v],⽽该管道实际流过的流量设为flow[u][v],⾃来⽔⼚称为源点s,隔壁⽼王家称为汇点t,则该问题求的是最终流⼊汇点的总流量flow的最⼤值。
⼆、思路分析关于最⼤流问题的解法⼤致分为两类:增⼴路算法和预流推进算法。
增⼴路算法的特点是代码量⼩,适⽤范围⼴,因此⼴受欢迎;⽽预流推进算法代码量⽐较⼤,经常达到200+⾏,但运⾏效率略⾼,如果腹⿊的出题⼈要卡掉⼤多数⼈的code,那么预流推进则成为唯⼀的选择。
( ⊙ o ⊙ )咳咳。
先来看下增⼴路算法:为了便于理解,先引⼊⼀个引理:最⼤流最⼩割定理。
在⼀个连通图中,如果删掉若⼲条边,使图不联通,则称这些边为此图的⼀个割集。
在这些割集中流量和最⼩的⼀个称为最⼩割。
最⼤流最⼩割定理:⼀个图的最⼤流等于最⼩割。
⼤开脑洞⼀下,发现此结论显⽽易见,故略去证明(其实严格的证明反⽽不太好写,但是很容易看出结论是对的,是吧)。
这便是增⼴路算法的理论基础。
在图上从s到t引⼀条路径,给路径输⼊流flow,如果此flow使得该路径上某条边容量饱和,则称此路径为⼀条增⼴路。
增⼴路算法的基本思路是在图中不断找增⼴路并累加在flow中,直到找不到增⼴路为⽌,此时的flow即是最⼤流。
可以看出,此算法其实就是在构造最⼩割。
增⼴路算法⽽预流推进算法的思路⽐较奇葩(没找到⽐较好的图,只能⾃⾏脑补⼀下了。
= =#):先将s相连的边流⾄饱和,这种边饱和的结点称为活动点,将这些活动点加⼊队列,每次从中取出⼀个点u,如果存在⼀个相邻点v是⾮活动点,则顺着边u->v 推流,直到u变为⾮活动点。
广工管理运筹学第八章(续)-最大流问题
标号过程: (1)给vs标号(-,+∞),vs成为已标号未检查的点,其 余都是未标号点。 (2)取一个已标号未检查的点vi,对一切未标号点vj: 若有非饱和弧(vi,vj),则vj标号(vi,l(vj)),其中l(vj)= min[l(vi),cij – fij],vj成为已标号未检查的点;若有非 零弧(vj,vi),则vj标号(-vi,l(vj)),其中l(vj)=min[l(vi), fji], vj成为已标号未检查的点。vi成为已标号已检查的点。 (3)重复步骤(2),直到vt成为标号点或所有标号点 都检查过。若vt成为标号点,表明得到一条vs到vt的 增广链,转入调整过程;若所有标号点都检查过, 表明这时的可行流就是最大流,算法结束。 调整过程:在增广链上,前向弧流量增加l(vt),后 向弧流量减少l(vt)。
x1 x2 x3 xn y1 y2 y3 ym
…
…
如果记X={x1, x2, …, xn},Y={y1, y2, …, ym},则该二 部图可记为G=(X, Y, E),而上述的工作匹配问题就 是:在图G中找一个边集E的子集,使得这个子集 中任意两条边没有公共端点,最好的方案就是要使 得该子集中的边数达到最大。 定义:对于二部图G=(X, Y, E),M是边集E的一个 子集,如果M中的任意两条边没有公共端点,则称 M是图G的一个匹配(也称对集)。 M中任意一条边的端点v称为(关于M的)饱和点, G中的其他顶点称为非饱和点。 若不存在另一匹配M1使得| M1 | > | M |,则称M为最 大匹配。
vs
x1 x2 x3 y1 y2 y3
vt
…
…
xn
ym
这样最大匹配问题就化为对上图的网络的最大流问题。
例
最大流问题
v , v 为 上前向边 v , v 为 后向边
j j
其余 f • 不难验证 1 仍为可行流(即满足容量限制条件与 平衡条件),但是 f1的总流量等于 f 的流加 , 这与 f 为最大流矛盾,所以 vt不属于 S 。
• 令S V S ,则 vt S。 • 于是得到一个割集 S , S ,对割集中的边 vi , v j 显 然有
• 最大流问题是一类应用极为广泛的问题,例如在交通运输 网络中有人流、车流、货物流,供水网络中有水流,金融 系统中有现金流,通讯系统中有信息流,等等。50年代 福特(Ford)、富克逊(Fulkerson)建立的“网络流 理论”,是网络应用的重要组成部分。 一、最大流有关概念 • 如果我们把图5-41年做输油管道网, us 为起点,u t为终点, u1 , u2 , u3 , u4 为中转站,边上的数表示该管道的最大输油能力,问应该 us 如何安排各管道输油量,才能使从 到 的总输油量最 大? ut • 管道网络中每边的最大通过能力即容量是有限的,实际流 量也不一定等于容量,上述问题就是要讨论如何充分利用 装置的能力,以取得最好效果(流量最大),这类问题通 常称为最大流问题。
• 例5.17 图5-43表明一个网络及初始可行 流,每条边上的有序数表示 c , f ,求这个 网络的最大流。 • 先给 v s 标以 , 。 , v2满足 vs , v2 E • 检查 v s 的邻接点 v1 , v2 , v3发现点 2 v 且 fs 2 2 cs 2 4, 令 v2 min 2, ,给 以标 2 号 vs ,1 。同理给 v3点以标号 vs ,1。 • 检查 v2 点的尚未标号的邻接点 v5 , v6 ,发现 v满 5 2, 足 v2 , v5 E且 f25 0 c25 3, 令 v5 min 3, 2 给 v2 ,2 以标号 。 v5
第八讲 最大流问题
基本想法
• 想象自上而下的水流 • 有向边是管道 • 点是管道连接处
– 每个点都可以用接一个蓄水池 – 每个点和它的水池以都在一个平台上, 随着算 法进行, 平台逐渐升高
• 水往低处流, 直到没有水了或者弧满载 (push过程), 如果有水却流不动, 需要抬高水 位, 让它可以继续往低处流(relabel过程)
• X和Y为结点集, 定义记号f(X, Y) • 引理: 在以f为流函数的流网络中, 以下三个等式成立
– f(X, X) = 0 – F(X, Y) = -f(X, Y) – 若X和Y不相交, f(XUY, Z) = f(X,Z)+f(Y,Z)
• 可以定义流的加法和标量积(注意容量限制) • 可以证明: 可行流集合是凸的, 即如果f1和f2都是流, 对于所有0<=α<=1, αf1+(1-α)f2也是.
• 基本操作RELABEL(u)的条件
– u是盈余的 – 对于Gf的所有弧(u,v), h[u]<=h[v]
• 即: 虽然u有盈余, 可是由于位置太低, 无法进行 PUSH操作, 需要RELABEL • 注意: s和t是不会有盈余的,因此不需要RELABEL • 既然u有盈余, 在残量网络中, u出发一定有弧
– 由于增广路是最短路, 关键弧(u,v)满足: df[v]=df[u]+1 – 增广后, (u,v)在Gf中消失. 重新出现的条件是: (u,v)减小, 即(v,u)出现在增广路上. 设此时的流3;1. 由引理知df’[v]>=df[v], 因 此df’[u]=df’[v]+1>=df[v]+1=df[u]+2 – 因此重新出现时d值增加2. 最多从0增加到|V|-2, 增加的次数不超过(|V|-2)/2 = |V|/2-1
最大流问题
9
v1
5
2
v3 5
6
vt
容量
7
v2
v4 10
c D 的 每 条 弧 (v i,vj)上 有 9 非 负 数 ij
发点(源) 一个入次0为 的点v s
收点(汇) 一个出次0为 的点v t
中间点
其余点
容量网络 D(V,A,C) 第8页
流
对 D 中 任 一 弧 ( v i,v j) 都 给 定 一 个 实 际 流 量 f i j
最大流-最小割定理:
任一个网G络中 ,
构造法证明
从vs到vt的 最 大 流 的 流 量 分 离vs,vt的 最 小 割 的 容 量
可 行 f流 是 最 大 流
不
存
在vs从 到vt的
可
增
广
链 第17页
可增广链的实际意义
沿着这条链从 vs 到 vt 输送流,还有潜力可挖,只 需按照调整方法,就可以把流量提高,调整后的 流,在各点仍满足平衡条件及容量限制条件,即 仍为可行流。
(5,4)
v 3 (vs,1) (2,2) v 6
d) 检查与v 5 相邻接且未标号的点v 1 ,v t 。而v 1 对 v 5 来讲是 流 入,现欲增加流出量,应该压v 缩1 的流入量,只要的流
入量f15 0, 可令调整量为
min{3,2}2 1
给 v 1 标号为 (v5,2) 表示可控量,反方向流量。
如果我们把图看做输油管道网为起点为终点为中转站边上的数表示该管道的最大输油能力问应该如何安排各管道输油量才能管道网络中每边的最大通过能力即容量是有限的实际流量也不一定等于容量上述问题就是要讨论如何充分利用装置的能力以取得最好效果流量最大这类问题通常称为最大流问题
最大流量问题
最大流量問題
原圖
方法
1.找一條從起點到終點且剩餘流通量>0的路徑(若找不到,則已經找到最大流量,演
算法完成)
2.在步驟1.所找到的路徑上,選擇剩餘流通量最小者,以c*表示,將c*的值累加到最
大流量
3.在步驟1.所找到的路徑上,每條邊的剩餘流通量減少c*,邊的反方向增加c*
4.回到步驟1.
步驟1分配流量5於O→B→E→T,得下列網路
步驟2分配流量3於O→A→D→T,得下列網路
步驟3分配流量1於O→A→B→D→T,得下列網路
步驟4分配流量2於O→B→D→T,得下列網路
步驟5分配流量1於O→C→E→D→T,得下列網路
步驟6分配流量1於O→C→E→T,得下列網路
步驟7分配流量1於O→C→E→B→D→T,得下列網路(完成)
步驟8比對目前流通容量與原流通容量的「出發端」,就可以知道各頂點流出量,每個頂點流入=流出
A:計算結果
B:原圖
C:解答。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
30 15 5
武
10
10 2
广
8
10 6
8
沈
18
源点s=成都,汇点t=北京。前面已订购机票情况表中的数字即是各边 上的容量(允许通过的最大旅客量),当各边上的实际客流量为零时 略去不写,以零流作为初始可行流。
利用标号法(经5次迭代)可以得到从成都发送旅客到北京 的最大流量如图所示
0 重 10 成 5 武 12 6 10 0 广 0 10 0 沈 上 0 6 12 0 昆 西 0 2 10 10 30 8 18 10 10 京 8 6 郑
割集的例子
v1 s v3
v2
t
v4
边集(s,v1),(v1,v3),(v2,v3),(v3,t),(v4,t)是G 的割集。其顶点分别属于两个互补不相交的点集。去掉这五条边, 则图不连通,去掉这五条边中的任意1-4条,图仍然连通。
定义7.9.5 割集的容量(简称割量) 最小 割集 割集(V1, V2)中所有起点在V1,终点在V2的边的容量的和称为 割集容量。例如下图中所示割集的容量为5
7.9
网络流
基本概念
v2 3 s 5 v1 2 v3 1 1 3 2 4 v4 5 t
定义7.9.1 设G=〈V,E,Ψ〉是弱连通有向图且 C:E→R0(其中R0为非负实数集合。) 如果加权图〈G,C〉满足: i) 图中恰有一个结点入度为0,称为源。ii)图中恰有一个结点出 度为0,称为汇。则称〈G,C〉为网络,C为该网络的容量函数。 对G的任意边e,称C(e)为e的容量。
所谓网络上的流,是指定义在弧集E上的函 数f={f(vi,vj)},并称f(vi,vj)为弧(vi,vj)上的流量, 简记为fij。
v2 3,1 s 5,2 1,0 v1 1,0 3,1 2,1 2,2 v3 4,1 v4 5,2 t
标示方式:每条边上标示两个数字,第一个是容量,第二 是流量
可行流、可行流的流量、最大流。
W ( f* ) =10+6+12+30+12+10+5 = 85
7.9 作业
• 2
下图中已经标示出了一个可行流,求最大流 v2
(4, 0) (1, 0) [-, ∞] s (5, 2) (1, 0) (3, 2) (2, 0) [s, 4] (4, 0) [v2, 4]
v4
(v5
[s, 3]
v1
(2, 2)
v3
(4, 0)
[-v4, 2]
如图已经得到增广链,然后进行调整。
可行流总是存在的,例如f={0}就是一个流量为0的可 行流。 所谓最大流问题就是在容量网络中寻找流量最大的可 行流。 一个流f={fij},当fij=cij,则称f对边(vi, vj)是饱和的, 否则称f对边(vi, vj)不饱和。 最大流问题实际上是一个线性规划问题。 但利用它与图的密切关系,可以利用图直观简便地求 解。
v2 3 s 5 v1 2 v3 1 1 3 2 4 v4 5 t
在容量网络的所有割集中,割集容量最小的割集称为最小割集 (最小割)。
对于可行流f={fij},我们把网络中使fij=cij的弧称为饱和弧, 使fij<cij的弧称为非饱和弧;把使fij=0的弧称为零流弧,使fij>0 的弧称为非零流弧。 若µ是联结源点s和汇 点t的一条链,我们规定链的 方向是从s到t,则链上的弧 被分成两类:前向弧、后向 弧。
调整后的可行流如下图: v2
(4, 4) (1, 0) [-, ∞] vs (5, 2) (1, 0) (3, 1) (2, 1) (4, 4)
v4
(5, 5)
t
v5 v1
[vs, 3] (2, 2)
v3
(4, 1)
如图所示最小割集的容量(即当前可行流的流量),就是最大 流的流量。注:用该方法可以同时得到最小割集,即图中连结 已标号的点与未标号的点的边集。
下面用实例说明具体的操作方法:例
v2 (3,3) s (5,1) v1 (2,2) v3 v2 v4 (4,3) (1,1) v4 (5,3) (3,0) (2,1)
(1,1)
在图中给出的可行流的 基础上, 到 的最大流 的最大流。 基础上,求s到t的最大流。
t
(-v1,1)
v2
(v2,1)
v4 (5,3) (3,3) t s (1,1) (3,0) v3
成都 成都 重庆 武汉 上海 西安 郑州 沈阳 昆明 广州
重庆 10
武汉 5 5
上海 15 10
西安 8 6
郑州
沈阳
昆明 12 15
广州 10
北京 30 25
15 8 6
8 14 8 18 10 6 10
8 8 2
用图来描述就是
6
重 西
6 8 8 15
郑
10 8
成
5 12
25 15
昆
14
8
10
京 上
v2 3,1 s 5,2 1,0 v1
4,1 1,0
v4 5,2 3,1 2,1 v3 t
2,2
设f是一个可行流,µ是从s到t的一条链,若µ满足前向弧都是 非饱和弧,后向弧都是都是非零流弧,则称µ是(可行流f的)一条 增广链。
对最大流问题有下列定理: 定理7.9.1 容量网络中任一可行流的流量不超过其 定理7.9.1 任一割集的容量。 任一割集的容量。 定理7.9.2(最大流-最小割定理)任一容量网络中, 定理7.9.2 最大流-最小割定理)任一容量网络中, 7.9. 割定理 最大流的流量等于最小割集的割 最大流的流量等于最小割集的割量。 推论1 可行流f 是最大流, 推论 可行流 *={fij*}是最大流,当且仅当 中不存 是最大流 当且仅当G中不存 在关于f 的增广链。 在关于 *的增广链。
(-,+∞)
s
(3,3)
(4,3)
(4,3) (1,0)
(v3,1) (-,+∞)
(1,0) (5,2) v1
(5,3) t
(1,1) (5,1) v1
(3,0) (2,2) v3
(2,1) (2,2)
(2,2)
(s,4)
(-v2,1)
(vs,3)
得增广链,标号结束,进入调 整过程
无增广链,标号结束,得最大 流。同时得最小割。
调整后的可行流如下图:
[vs, 1]
v2
(4, 3)
[v2, 1]
v4
(5, 5) (4, 3) (1, 0) [-, ∞] vs (5, 2) (1, 0) (3, 2)
t [v , 1] 5
(2, 0)
v5 v1
[vs, 3] (2, 2)
v3
(4, 0)
[v3, 1]
[-v4, 1]
如图已经得到增广链,然后进行调整。
可行流是指满足如下条件的流: (1)容量限制条件:对G中每条边(vi,vj), 有
0 ≤ f ij ≤ cij
(2)平衡条件: 对中间点,有:
∑f
j
ij
= ∑ f ki
k
(即中间点vi的物资输入量等于输出量) 对收点vt与发点vs,有: ∑ f si = ∑ f jt = W
i j
(即vs发出的物资总量等于vt接收的物资总量),W是 网络的总流量。
具有实际背景的例子
• 国庆大假期间旅游非常火爆,机票早已订购一空。成都一 家旅行社由于信誉好、服务好,所策划的国庆首都游的行 情看好,要求参加的游客众多,游客甚至不惜多花机票钱 辗转取道它地也愿参加此游。旅行社只好紧急电传他在全 国各地的办事处要求协助解决此问题。很快,各办事处将 其已订购机票的情况传到了总社。根据此资料,总社要作 出计划,最多能将多少游客从成都送往北京以及如何取道 转机。下面是各办事处已订购机票的详细情况表:
求最大流的标号法 (Ford , Fulkerson)
标号法思想是:先找一个可行流。对于一个可 行流,经过标号过程得到从源点s到汇点t的增广链 ;经过调整过程沿增广链增加可行流的流量,得 新的可行流。重复这一过程,直到可行流无增广 链,得到最大流。
标号过程: (1)给s标号(-,+∞),s成为已标号未检查的点,其余都是未标 号点。 (2)取一个已标号未检查的点vi,对一切未标号点vj:若有非 饱和弧(vi,vj),则vj标号(vi,l(vj)),其中l(vj)=min[l(vi),cij – fij],vj 成为已标号未检查的点;若有非零弧(vj,vi),则vj标号(-vi,l(vj)), 其中l(vj)=min[l(vi), fji],vj成为已标号未检查的点。vi成为已 标号已检查的点。 (3)重复步骤(2),直到t成为标号点或所有标号点都检查过。 若t成为标号点,表明得到一条s到t的增广链,转入调整过程; 若所有标号点都检查过,表明这时的可行流就是最大流,算 法结束。 调整过程:在增广链上,前向弧流量增加l(vt),后向弧流量 减少l(vt)。
给定容量网络G=(V,A,E),若点集V被剖分为两 个非空集合V1和V2,使 s∈V1 ,t∈V2,则把弧集 (V1,V2)称为(分离s和t的)割集。 割
v2 3 s 5 v1 2 v3 1 1 3 2 4 v4 5 t
显然,若把某一割集的弧从网络中去掉,则从s 到t便不存在路。所以,直观上说,割集是从s到t的必 经之路。 注:有向边也称为弧。