4最大流问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
fij* *=
fij* + θ fij* - θ fij*
(vi ,vj) + (vi ,vj) (vi ,vj)
不难验证fij* *是一个可行流,且v(f* *)=v(f*)+θ﹥ v(f*)。这与是最大流的假设矛盾。
充分性证明
若D是不存在关于f*的增广链,要证明f*是最大流,设有这样 一个点集Vi*,它满足:
三、最大流问题
网络最大流问题就是找一个网络上最大的可行流。 即找一个流{fij},使其流量达到最大,并满足下述 约束条件:
0 ≤ fij ≤ cij (vi ,vj) A fij - fji = V(f) 0 - V(f) (i = s) (i s, t ) (i = t)
fij + fij - fij
例:用标号法求下图所示公路交通网络的最大流量
v2 v5
vs
v4
vt
v3
v6
解:为记算方便,将图中各路段的通行能力、流量都除以
1000,如下页图,弧旁的数据是(cij ,fij),单位是1000辆/日。
v2
Baidu Nhomakorabeav5
vs
v4
vt
v3
v6
1.标号过程 1)先给vs标上(0,∞ ) 2)检查vs
例:下图中所示的网络N中,每条弧旁的第一个 数字是弧的容量,第二个数是弧的流,例如 c(x,1)=8,f(x,1)=4,c(1,2)=5,f(1,2)=1等等。
V1
8,4 x 7,4 9,3
V3
5,4
5,1
2,2 6,1 10,4
y
V2
9,5
V4
验证,网络N满足容量限制条件和流量平衡条件, 网络N的流量值fxy =8.
v2 v5
vs
v4
vt
v3
v6
对这个可行流重复标号过程,寻找增广链。 先给vs标上(0,∞ ) 检查vs ,v3不满足标号条件。V2 满足标号条件,即v2 的标 号为(vs ,2). 检查v2 ,在前向弧( v2 ,v5)、( v2 , v4 )上,因为 f25= c 25,f24= c 24 ,在后向弧(v3, v2)上,因f32 =0,均不满 足标号条件。因此标号过程无法继续下去,即已经不存在 增广链,计算结束。 这时的可行流就是最大流。最大流量为: V(f) =fs2+ fs3 = f5t+f6t+f4t=20 故图中所示公路网络的最大通行能力为20*1000=20000辆/日。
最大流问题
一、基本概念
1.网络与流 2.可行流 3.增广链 4.割集与割量
二、基本定理
1.最大流充要条件 2.最大流量—最小割定理
三、最大流问题
1.标号法 2.例题 3.习题
一、基本概念
1.网络与流
许多工程系统的网络包含流量的问题。 例如有A、B两个城市,连接两个城市的所有公路互相连 接形成一个公路交通运输网络,从城市A发出的交通流经 过若干中间路段和交通节点到达城市B,如图1所示。公路 网中各个公路路段的通行能力是有限的。通行能力即单位 时间内路段能通过的最多车辆数。图中弧旁的数据为每日 的通行能力,也称路段容量。
最大流的充要条件为我们提供了如何寻找网络中 最大流的一个方法。若给了一个可行流f,只要判 断D中有无关于f的增广链,如果有,则可以按照 前面证明必要性的办法,调整f,得到一个流量增 大的新的可行流;如果没有增广链,则直接得到 最大流。 实际计算中,采用标号法(又称Ford算法)来寻 找最大流。
标号法
4.割集与割量
设某个网络如下图所示,在网络的某处横切一些弧,把网 络切成两半,一半包含发点VS,一半包括收点Vt,若将被 切的弧全部去掉,即将弧集E1={(v2 ,v4),(v3 ,v4),(v3 ,v5)}去 掉,则发点VS与收点Vt之间不存在通路。这个弧集E1被称 为割集。
V4 V6 Vt V2 V4 V6 Vt
在前向弧(vs,v3)上,因为fs3=cs3,不满足标号 条件. 在前向弧(vs,v2)上, 因为fs2=7< cs2 = 13 ,则v2 的标号为( vs, l (v2))。其中: l (v2)=min[l(vs), cs2 - fs2]=min(∞ ,13-7)=6 类似的进行下去,有: v4v5不可以标号,v3标号为(- v2,4) v6不可以标号,v4标号为(v3,4) vt不可以标号,v6标号为(v4,4) vt标号为(v6,4) 所以调整量 =l(vt)=4
2.调整过程
首先按vt及其它点的第一部分标号,利用“反向 追踪”的方法,找出增广链 ,令调整量 =l(vt), 即vt的第二部分标号。令
(vi ,vj) + f ‘ij= (vi ,vj) (vi ,vj) ‘ ‘ 则得到一个新的可行流f = { f ij } 。去掉所有的标号, 对新的可行流f ‘重新进入标号过程。
(1)若在前向弧(vi,vj)上,fij<cij ,则给vj标号 (vi,l(vj)), 这里 l(vj)=min [ l(vi), cij-fij ] (2)若在后向弧(vj , vi)上,fji>0 ,则给vj标号 (-vi,l(vj)), 这里 l(vj)=min [ l(vi), fij ] 于是, vi成为检查过的标号点, vj成为标号而未 检查过的点。重复上述过程,一旦vt被标上号, 表明得到一条从vs到vt的增广链,转入下一步调 整过程。
5000 v6
10000
设f是一个可行流,µ是从vs到vt的一条链,若µ满足下述条件: (1)在前向弧µ+上,0 ≤fij < cij,即µ+中每一条弧均为非饱 和弧; (2)在后向弧µ-上,0 <fij ≤ cij,即µ-中每一条弧均为非零 流弧。 则称之为关于可行流的一条增广链。 可见,增广链是可以使从vs到vt方向的流量增大的链。
v2 v4 v5
vs
vt
S
1
v3
v6
S
2
图2
图中vs为发点 , vt为收点,弧旁的数据为通行能力,若在 图中取一割集s1,将弧(vs,v2),(vs,v3)割断,则网络被割成 两个互相不连通的子图,而vs与vt分别属于这两个子图, 这样从vs到vt的通路被中断。割集的容量cs2+cs3=22000辆/ 日。显而易见,任何一可行流相应的网络流量(网络总交 通量)V(f)均不可能超过这个割集的容量。如果在图中另 取一个割集s2 ,其割量为27000辆/日,那么,该网络任何 一个可行流相应的网络流量也不会超过这个割集的容量。 如果我们把网络中的所有割集全找出来并计算其割量,就 可以得到这个网络的最小割量为20000辆/日。显然,从vs 到vt的整个网络的流量(即总交通量)最大不会超过 20000辆/日。
于是得到从起点到终点的一条链 ,如下图所示
按vt标号的第二部分, =4,在上调整,
fs2 + =7+4=11 f34 + =0+4=4 f46 + =0+4=4 f6t + =5+4=9 对后向弧: f32 - =4 – 4 =0
对前向弧:
其余的fij不变,于是得到一个新的可行流,如下图所示。
1.寻找增广链的标号过程
对网络的一些点依次标号,直至到达收点,形成一条增广 链。每个标号点的标号包括两部分:第一部分表明它的标 号是从哪一点得到的,以便记住增广链;第二部分是为确 定增广链的调整量用的。 1)初始化。给vs标上(0,∞ ),这时vs是已标号未检查 的点,其余都是未标号的点。 2)检查与标号。一般的,取一个已标号的未检查的点vi, 对于一切未标号点vj:
( v i , v j ) ( S , T )
割集是vs到vt的必经之路,任何一个可行流V(f)都不会超过 任一割集的容量,即
V(f) ≤ C(S,T)
二、基本定理
1.最大流充要条件 当且仅当不存在关于f*的增广链时,可行流 f*是最大流。
必要性证明(反证法)
若f*是最大流,设D中存在关于f*的增广链,令 θ = min { min(c - f), min fij* } + 由增广链的定义可知, θ ﹥ 0,令
V2
Vs
V3
V5
V7
Vs
V3
V5
V7
一般地,若网络的节点集为V,把点集V分割成两个集合S、 T。S包含发点vs,T包含收点vt,则把所有起点在S、终点 在T的弧组成的弧集(S,T)称为割集。必有:S,T V,S∪T=V,S ∩ T= 。把割集(S,T)中的所有弧的容量 之和称为这个割集的容量(简称为割量),记为C(S,T)。 即 C (S ,T ) c ij
3.增广链
若给定一个可行流 f=(fij),我们把网络中使fij=cij 的弧称之为饱和弧;fij<cij的弧称之为非饱和弧; 把fij=0的弧称之为零流弧;fij>0的弧称之为非零 流弧。
若µ是网络中从发点vs到收点vt的一条链,我们定 义链的方向是从vs到vt,则链上的弧被分为两类: 一类弧与链的方向相同,称为前向弧,前向弧的 全体记为µ+;另一类弧与链的方向相反,称为后 向弧,后向弧的全体记为µ-。
网络
给定一个有向图D=(V,A),在V中指定两点: 发点vs和收点vt,其余的点为中间点。对于图中的 每一弧(vi,vj)∈A,对应的有一个数cij≥0,称 之为弧的容量。我们把这样的图D称为网络,计 作D=(V,A,C)。
在图1中,城市A为发点vs,城市B为收点vt,图中路段通 行能力为弧的容量cij,如c32=4000,c45=5000等。 又如,在水管网中,水流从进水管流向出水管,则进水管 为发点,出水管为收点,管道的容量即弧的容量; 在电路网络中,电流从电源正极流向负极,则电源正极为 发点,电源负极为收点,输电线的容量即为弧的容量。 所谓网络流,是指定义在弧集合A上的一个函数f=「fij」, 并称fij为弧(vi,vj)上的流量 。
可行流
我们把满足上述条件的流称之为可行流,式中v (f)成为这个可行流的流量,即发点的净输出量 (或收点的净收入量)
可行流总是存在的 ,例如所有弧的容量fij均为0就 是一个可行流(零流)。显然,符合上述条件的 可行流f不是唯一的。可行流是一个具有实际意义 的流,我们讨论的流一般都是可行流。
所以v(f*)=c(Vi* , Vi* ),于是f*必是最大流,定理得证。
由上面的证明中可见,若f*是最大流,则网络中必 然存在一个截集Vi* =V- Vi*使
v(f*)=c(Vi* , Vi* )
于是有下面的最大流量—最小割定理
2.最大流量—最小割定理
任意网络D中,从发点vs到收点vt的最大流量等于分离vs与 vt的最小割集的容量。 我们分析下图中的公路网络
在下图中,考虑链µ={v1,v2,v3,v4,v5,v7} 则µ+ ={(v1,v2),(v3,v4),(v4,v5), (v5,v7)} µ- = {(v2,v3)}
v2 13000 5000 v5 5000 2000
V1
(A) 9000
6000 v4
5000
4000
4000
µ
V7
(B)
4000 v3
ij ji ( v i , v j ) A ( v i , v j ) A
对于发点vs,记 对于收点vt,记
( v s , v j ) A
f sj
( v j , v s ) A
f
js
V(f)
( v t , v j ) A
f tj
( v j , v t ) A
f
jt
V ( f )
v2
5000 6000 v4 5000 5000 5000
v5
13000
V1 (A) 9000 4000 v3
2000
4000 V7 (B) 10000 v6
4000
图1
那么,对整个网络来说,A、B两城市之间的最大通行能 力是多少呢?这就是一个网络最大流的问题。
另外,如输电网的输电能力、供水系统的供水能力、输油 管道的输油能力等也可归纳为网络最大流问题。
2.可行流
在实际交通网络中,对于流有两个明显的要求: 一是每条弧上的流量不能超过它的容量(通行能力);
二是中间点的流量为0(一个点的流出量减去流入量为这个 点的流量)。由于中间点只起中转的作用,流进中间点的 交通量应等于流出中间点的交通量,即该点的流量为零。
一个有实际意义的流一般应满足下述条件: (1)容量限制条件: 0≤fij≤cij (vi,vj)∈A (2)流量平衡条件: 对于中间点: 流出量=流入量 即对每个i(i≠s,t),有: f f 0
vs Vi* vi Vi* , fij<cij vj Vi* vi Vi* , fij>0 vj Vi*
因为不存在关于f*的增广链,故vt Vi* ,于是得到一个截集 Vi* =V- Vi* 。显然必有
fij* =
cij 0
(Vi , Vj) (Vi* , Vi* ) (Vi , Vj) (Vi* , Vi* )