《经典网络流教程.ppt》由会员分享,可在线阅读,更多相关《经典网络流教程.ppt(49页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、网络流网络流网络可以被想网络可以被想象成一些输水象成一些输水的管道的管道. .括号内括号内右边的数字表右边的数字表示管道的容量示管道的容量, ,左边的数字表左边的数字表示这条管道的示这条管道的当前流量。当前流量。最大流为最大流为5 5?一个简单的例子一个简单的例子-网络的最大流问题网络的最大流问题atsbcd(3,4)(2,2)(3,3)(2,2)(1,1)(0,2)(3,3)(3,4)一些符号和定义一些符号和定义nV表示整个图中的所有结点的集合.nE表示整个图中所有边的集合.nG = (V,E) ,表示整个图.ns表示网络的源点,t表示网络的汇点.n对于每条边(u,v),有一个容量c(u,v
2、) (c(u,v)=0)n如果c(u,v)=0,则表示(u,v)不存在于网络中。n如果原网络中不存在边(u,v),则令c(u,v)=0n对于每条边(u,v),有一个流量f(u,v).网络流的三个性质网络流的三个性质1、容量限制容量限制: fu,v=cu,v2、反对称性反对称性:fu,v = - fv,u3、流量平衡流量平衡: 对于不是源点也不是汇点的对于不是源点也不是汇点的任意结点任意结点,流入该结点的流量和等于流出该流入该结点的流量和等于流出该结点的流量和。结点的流量和。结合反对称性结合反对称性,流量平衡也可以写成流量平衡也可以写成:只要满足这三个性质只要满足这三个性质,就是一个合法的网络就
3、是一个合法的网络流流,也称为也称为可行流可行流。可行流至少有一个零流。可行流至少有一个零流。( , )0u Vf v u最大流问题n定义一个网络的流量(记为定义一个网络的流量(记为|f|)=n最大流最大流问题,就是求在满足网络流性质的情况下,问题,就是求在满足网络流性质的情况下,|f|的最大值。的最大值。Vvvsf),(弧的分类弧的分类n若给定一个可行流若给定一个可行流F=(Fij),我们把网络中我们把网络中Fij=Cij的的弧称作饱和弧,弧称作饱和弧, Fij0的弧称作非零流弧的弧称作非零流弧n若若P是网络中联结源点是网络中联结源点s和汇点和汇点t的的一条路的的一条路(不用不用管边的有向性管
4、边的有向性),我们定义路的方向是从,我们定义路的方向是从Vs到到Vt,则路上的弧被分为两类:一类与路的方向一致,则路上的弧被分为两类:一类与路的方向一致,称为前向弧;另一类和路的方向相反,称为后向称为前向弧;另一类和路的方向相反,称为后向弧弧残量网络残量网络n为了更方便算法的实现,一般根据原网络定义一为了更方便算法的实现,一般根据原网络定义一个残量网络。其中个残量网络。其中r(u,v)为残量网络的容量。为残量网络的容量。nr(u,v) = c(u,v) f(u,v)n通俗地讲:就是对于某一条边(也称弧),还能通俗地讲:就是对于某一条边(也称弧),还能再有多少流量经过。再有多少流量经过。nGf残
5、量网络残量网络,Ef表示残量网络的边集表示残量网络的边集.(a,b) 表示表示 (流量流量f,容量容量c)v1tsv2(2,2)(4,4)(2,4)(0,3)(2,2)v1tsv2232422如果网络中一条边的容量为如果网络中一条边的容量为0,则认为这条边不在残量网络中。则认为这条边不在残量网络中。r(s,v1)=0,所以就不画出来了。另外举个例子:所以就不画出来了。另外举个例子:r(v1,s) = c(v1,s) f(v1,s) = 0 (-f(s,v1) = f(s,v1) = 4.图1 原网络图2 残量网络n从残量网络中可以清从残量网络中可以清楚地看到:楚地看到:n因为存在边因为存在边(
6、s,v2) = 3,我们知道从我们知道从S到到v2还可以再增加还可以再增加3单位单位的流量;的流量;n因为存在边因为存在边(v1,t) = 2,我们知道从我们知道从v1到到t还还可以再增加可以再增加2单位的单位的流量。流量。v1tsv2232422为什么要建立后向弧为什么要建立后向弧n其中像其中像(v1,s)这样的边这样的边称为后向弧称为后向弧,它表示从它表示从v1到到s还可以增加还可以增加4单位单位的流量。的流量。n但是从但是从v1到到s不是和原不是和原网络中的弧的方向相反网络中的弧的方向相反吗?显然吗?显然“从从v1到到s还还可以增加可以增加4单位流量单位流量”这条信息毫无意义。那这条信息
7、毫无意义。那么,有必要建立这些后么,有必要建立这些后向弧吗?向弧吗?v1tsv2232422为什么要建立后向弧为什么要建立后向弧n显然,例显然,例1中的画出来的不是一个最大流。中的画出来的不是一个最大流。n但是,如果我们把但是,如果我们把s - v2 - v1 - t这条路径经过的弧这条路径经过的弧的流量都增加的流量都增加2,就得到了该网络的最大流。就得到了该网络的最大流。n注意到这条路径经过了一条后向弧注意到这条路径经过了一条后向弧:(v2,v1)。n如果不设立后向弧,算法就不能发现这条路径。如果不设立后向弧,算法就不能发现这条路径。n从本质上说,后向弧为算法纠正自己所犯的错误提供了可从本质
8、上说,后向弧为算法纠正自己所犯的错误提供了可能性,它允许算法取消先前的错误的行为(让能性,它允许算法取消先前的错误的行为(让2单位的流单位的流从从v1流到流到v2)可改进路(增广路)可改进路(增广路)n可改进路定义:可改进路定义:在残在残量网络中的一条从量网络中的一条从s通通往往t的路径,其中任意的路径,其中任意一条弧一条弧(u,v),都有,都有ru,v0。(每一条(每一条前向弧都是非饱和弧,前向弧都是非饱和弧,每一条后向弧都是非每一条后向弧都是非零流弧)零流弧)n绿色的即为一条可改绿色的即为一条可改进路。进路。v1tsv2232422可改进路算法可改进路算法n可改进路算法:每次用可改进路算法
9、:每次用BFS找一条可改进路,找一条可改进路,然后沿着这条路径修改流量值(实际修改的是然后沿着这条路径修改流量值(实际修改的是残量网络的边权),使得总流量变得更大,修残量网络的边权),使得总流量变得更大,修正的方法是:正的方法是: 1、不属于可改进路、不属于可改进路P的弧一概不变的弧一概不变 2、对于可改进路、对于可改进路P上的所有前向弧加上上的所有前向弧加上a,后向,后向弧减去弧减去a,这里,这里a是一个可改进量。是一个可改进量。a既要尽量大,既要尽量大,又要保证变化后又要保证变化后0=Fij 2证明证明: 显然显然.假设有增广路径假设有增广路径,由于增由于增广路径的容量至少为广路径的容量至
10、少为1,所以用这个增广路所以用这个增广路径增广过后的流的流量肯定要比径增广过后的流的流量肯定要比f的大的大,这与这与f是最大流矛盾是最大流矛盾.结论结论2(点集总流量为零点集总流量为零)n不包含不包含s和和t的点集的点集,与它相关联的边上的流量之和为与它相关联的边上的流量之和为0.n证明证明: f(X,V) = = (由流量平衡由流量平衡) = 0 ( , )x Xv Vf x v Xx0结论结论3n任意割的流量等于整个网络的流量任意割的流量等于整个网络的流量.n证明证明: nf(S,T) = f(S,V) f(S,S) (由辅助定理由辅助定理1) = f(S,V) (由辅助定理1) = f(
11、S,V) + f(S s,V) (同上) = f(s,V) (由辅助定理2) = |f| (由|f|的定义)结论结论4n网络的流量小于等于任意一个割的网络的流量小于等于任意一个割的容量容量.(注意这个与辅助注意这个与辅助定理定理3的区别的区别.这里是容量这里是容量)n即即|f| = c(S,T)n证明证明: |f| = f(S,T) = (由定义由定义) 3证明证明: 定义定义S = s v | 在残量网络中在残量网络中s到到v有一有一条路径条路径 ; T = V- S. 则则 (S,T) 是一个割是一个割.n|f| = f(S,T) (由辅助定理由辅助定理3)n而且而且,r(S,T) = 0
12、. 假设不为假设不为0,则在残量网络中则在残量网络中, 两个集合两个集合间必定有边相连间必定有边相连,设在设在S的一端为的一端为v,在在T的一端为的一端为u. 那么那么,s就可以通过就可以通过v到达到达u,那么根据那么根据S的定义的定义,u就应该在就应该在S中中.矛盾矛盾. 所以所以,|f| = f(S,T) = c(S,T) r(S,T) = c(S,T)1、f是最大流是最大流2、残量网络中找不到增广路径、残量网络中找不到增广路径3、|f| = c(S,T)n3 - 1证明证明: |f| 0),那么那么|f|+d肯定不能满足上面肯定不能满足上面的条件的条件.1、f是最大流是最大流2、残量网络
13、中找不到增广路径、残量网络中找不到增广路径3、|f| = c(S,T)标号法寻求可改进路(标号法寻求可改进路(Ford-Fulkerson算法)算法),()min),ijijCFijijijjijjij(1)若在弧(V ,V )上F 0 则给V标号V ,L(V,这里L(VL(V。这时V成为标号未检查的顶点。 在在Vi的全部相邻顶点都已标号后,的全部相邻顶点都已标号后, Vi成为标号而已检查过的顶点。重成为标号而已检查过的顶点。重复上述步骤,一旦复上述步骤,一旦Vt被标上号,表明得到一条从被标上号,表明得到一条从Vs到到Vt的可改进路的可改进路P,转入调整过程。转入调整过程。标号法寻求可改进路(
14、标号法寻求可改进路(Ford-Fulkerson算法)算法)调整过程:调整过程: 采用采用“倒向追踪倒向追踪”的方法,从的方法,从Vt开始,利用第一个标号找出可改进路开始,利用第一个标号找出可改进路P,并,并以以Vt的第二个标号的第二个标号L (Vt)作为改进量作为改进量a,改进,改进P上的流量。上的流量。 例如:设例如:设Vt的第一个标号为的第一个标号为Vk(或或-Vk),则弧,则弧(Vk,Vt)(或或(Vt,Vk)是是P上的上的弧,接下来再检查弧,接下来再检查Vk的第一个标号,如此继续下去的第一个标号,如此继续下去.,直到查倒,直到查倒Vs为止。为止。这时被找出的弧构成了这时被找出的弧构成
15、了P。 令改进量令改进量a=L(Vt),即,即Vt的第二个标号。的第二个标号。 去掉所有的标号,对新的可行流去掉所有的标号,对新的可行流Fij,重新进入标号过程。直到标号过程无法重新进入标号过程。直到标号过程无法继续。继续。+ij-ijij (V,V )P (V,V )P (V,V )PijijijijFaFFaF例例1 求如下网络的最大流求如下网络的最大流V2VtVsV1V4V3(3,3)(1,5)(3,4)(3,5)(1,1)(1,1)(2,2)(1,2)(0,3)标号法分析例标号法分析例11.标号过程标号过程(1)首先给首先给Vs标上标上(0,+)(2)检查检查Vs。弧。弧(Vs,V2)
16、上,上,Fs2=Cs2=3,不满足,不满足标号条件;弧标号条件;弧(Vs,V1)上,上,Fs1=10,则给,则给V2记下标号为记下标号为(-V1,L(V2),其中,其中L(V2)minL(V1),F21=min4,1=1标号法分析例标号法分析例1(4)检查检查V2。弧。弧(V2,V4)上,上,F24=3C24=4,则,则给给V4标号标号(V2,L(V4),其中,其中L(V4)=minL(V2),C24-F24=min1,1=1 同理,标注同理,标注V3为为(-V2,1).(5)在在V3,V4中任选一个进行检查,如中任选一个进行检查,如V4。弧。弧(V4,Vt)上,上, F4t=30时有上下界的
17、网络不一定时有上下界的网络不一定存在可行流了。存在可行流了。 那么如何判断一个有上下界的网络有无可行流呢?那么如何判断一个有上下界的网络有无可行流呢?容量有上下界的网络的最大流容量有上下界的网络的最大流 算法思路:将原网络转换为一个附加网络。算法思路:将原网络转换为一个附加网络。1.新增加两个顶点新增加两个顶点 和和 ,分别称为附加源和附加汇,分别称为附加源和附加汇2.对原网络对原网络N的每个顶点的每个顶点U加一条新弧加一条新弧 ,这条弧,这条弧的容量为以的容量为以U为尾的弧的容量下限之和。为尾的弧的容量下限之和。3.对原网络对原网络N的每个顶点的每个顶点U加一条新弧加一条新弧 ,这条弧,这条
18、弧的容量为以的容量为以U为头的弧的容量下限之和。为头的弧的容量下限之和。4.原网络的弧仍保留,弧容量修正为原网络的弧仍保留,弧容量修正为C(e) -B(e) 5.再添两条新弧再添两条新弧e=st,e=ts。其容量均为。其容量均为6.用标号法求此新网络的最大流,若结果能使流出用标号法求此新网络的最大流,若结果能使流出 的一的一切弧都满载,则原网络有可行流切弧都满载,则原网络有可行流F(e) F(e) B(e),否则无可行流。否则无可行流。7.在原网络中运用标号法将可行流放大,从而得出最大流。在原网络中运用标号法将可行流放大,从而得出最大流。steU tesUs容量有上下界的网络的最大流容量有上下
19、界的网络的最大流例原网络,第一个数字为例原网络,第一个数字为B(e),第二个为,第二个为C(e)容量有上下界的网络的最大流容量有上下界的网络的最大流按照上述算法求得按照上述算法求得附加网络,并用标附加网络,并用标号法求此网络的最号法求此网络的最大流。大流。发现从发现从 流出的流流出的流都满载,所以有可都满载,所以有可行流。行流。s容量有上下界的网络的最大流容量有上下界的网络的最大流按照按照F(e) F(e) B(e)将此最大流还原为原将此最大流还原为原网络的最大流网络的最大流容量有上下界的网络的最大流容量有上下界的网络的最大流用标号法进行可行流放大,得到最大流用标号法进行可行流放大,得到最大流
20、10容量有上下界的网络的最小流容量有上下界的网络的最小流n按照前述附加网络方法求得可行流,只不过在放按照前述附加网络方法求得可行流,只不过在放大可行流时,以大可行流时,以t为源点,为源点,s为汇点进行,倒向求为汇点进行,倒向求出的最大流为从出的最大流为从s到到t到的最小流。到的最小流。最小费用最大流问题最小费用最大流问题n求运输量最大且费用最少求运输量最大且费用最少的运输方案的运输方案n求一个最大流,使得此式求一个最大流,使得此式取最小值取最小值( )*ijijB FBF最小费用最大流问题最小费用最大流问题算法思想:算法思想: 若若F是所有可行流中费用最小的,而是所有可行流中费用最小的,而P是
21、关于是关于F的的所有可改进路中费用最小的,沿着所有可改进路中费用最小的,沿着P取调整取调整F最大,最大,则得到的流为最小费用最大流。则得到的流为最小费用最大流。最小费用最大流问题最小费用最大流问题步骤:步骤:1.取取F(0)=0;2.若第若第k-1步得到最小费用流步得到最小费用流F(k-1),则构造赋权有向图,则构造赋权有向图W(F(k-1),在,在W(F(k-1)中,寻求从中,寻求从Vs到到Vt的最短路径。的最短路径。若不存在最短路若不存在最短路(即最短路为即最短路为+),则,则F(k-1)为最小费用最为最小费用最大流;若存在最短路,则为可改进路大流;若存在最短路,则为可改进路P,在,在P上
22、对上对F(k-1)进行进行调整。调整。3.其中,赋权有向图其中,赋权有向图W(F(k)的构造规则为:其顶点是原网络的构造规则为:其顶点是原网络的顶点,而每条弧变为两个方向相反的弧,定义权值的顶点,而每条弧变为两个方向相反的弧,定义权值Wij为为最小费用最大流问题最小费用最大流问题4.在在P上对上对F(k-1)进行调整的方法为:进行调整的方法为:5.得到新流得到新流F(k),再对,再对F(k)重复上述步骤,直到重复上述步骤,直到不存在最短路径。不存在最短路径。最小费用最大流问题例最小费用最大流问题例最小费用最大流问题例最小费用最大流问题例最小费用最大流问题例最小费用最大流问题例最小费用最大流问题例最小费用最大流问题例最小费用最大流问题例最小费用最大流问题例作业作业n本课算法的实现本课算法的实现n标号法标号法n容量有上下界网络的最大流容量有上下界网络的最大流n容量有上下界网络的最小流容量有上下界网络的最小流n最小费用最大流最小费用最大流