第六章、网络流.ppt
《第六章、网络流.ppt》由会员分享,可在线阅读,更多相关《第六章、网络流.ppt(99页珍藏版)》请在冰豆网上搜索。
第六章第六章网络流图问题网络流图问题1网络流图问题和最大流2割切3Ford-Fulkerson最大流最小割切定理42F最大流最小割切标号算法5Edmonds-Karp修正算法,Dinic算法应用篇应用篇应用篇应用篇11网络流图问题和最大流网络流图问题和最大流把一种产品从产地通过铁路或公路网运往市场,交通网络中每一段的运输能力有一定限度,问如何安排,使得运输最快?
这个问题在运输调度工作中是重要内容之一,同时也是运筹学许多问题的模型。
21网络流图问题和最大流网络流图问题和最大流-例例产地产地市场市场中转站中转站a中转站中转站b中转站中转站c中转站中转站d4433222413231网络流图问题和最大流网络流图问题和最大流1nn定义:
带权的有向图G=(V,E),满足以下条件,则称为网络流图网络流图(flownetwork)。
(1)仅有一个入度为0的顶点s,称s为源点源点(source)或发点发点;
(2)仅有一个出度为0的顶点t,称S为汇点汇点(sink)或沟沟或收点收点;(3)每条边的权值都为非负数,称为该边的容量容量,记作c(i,j)。
41网络流图问题和最大流网络流图问题和最大流-例例下图所示就是一个网络流图:
例例stabcd44332224132源源点点汇汇点点容容量量中转站中转站51网络流图问题和最大流网络流图问题和最大流-2nn对于网络流图G,每条边都给定一个非负数fij,这组数满足下面条件,称为网络的容许容许流流(flow),记作f。
(1)0fijc(i,j);
(2)除源点s和汇点t,其余顶点vi恒有:
fijfkijkjk即每个点流入和流出量相同;(3)对于源点s和汇点t有:
fsifjtwijijw称为网络流的流量网络流的流量。
源点流出的量源点流出的量汇点流入的量汇点流入的量61网络流图问题和最大流网络流图问题和最大流-3下图所示就是一个网络流图上的容许流:
例例stabcd(4,3)(4,3)(3,2)(3,0)(2,1)(2,2)(2,2)(4,4)(1,1)(3,2)(2,2)容容量量容许流容许流fat71网络流图问题和最大流网络流图问题和最大流-4对于下图,根据各点能量守恒的关系,可分别得下列各式:
fsa+fsb+fsc=w
(1)fat+fbt+fdt=w
(2)fsa+fbafat+fab(3)fsb+fcb+fabfba+fbt+fbd(4)fscfcb+fcd(5)fbd+fcdfdt(6)0fsa4,0fsb3,0fsc4,0fab2,0fba3,0fat3,0fbt2,0fbd2,0fcb1,0fcd2,0fdt2,w0stabcd4433222413282割切割切图G=(V,E)是已知的网络流图,假设S是V的一个子集,而且S满足以下条件:
(1)sS
(2)tS令=V-S,即是S的补集。
SSSS这样把顶点分为S和两个部分,sS,t。
SSnn定义:
起点在S,终点在的边的集合是割切割切,用(S,)表示。
92割切割切-2nn在边集(S,)中,把从S到的边的容量之和称为割切的容量割切的容量,记作C(S,),即C(S,)=SSSstabcd44332224132S=s,b,c,d,=a,tSC(S,)=csa+cba+cbt+cdt=4+3+2+4=13SSSjSiijc(S,)=(s,a),(b,a),(b,t),(d,t)S102割切割切-定理定理6.1网络容许流量和切割容量之间存在下述关系:
nn定理6.1:
网络流的最大流量小于等于的任意的割切容量,即:
maxwC(S,)。
S112割切割切-定理定理6.1证明证明当i点既不是源点s,也不是汇点t的任意点时,恒有:
fijfji0
(1)jjVjVjVV但i为源点s时有fsjw
(2)jjVV从
(1)、
(2)对iS求得fij-fjiwiiS,jS,jVV证明证明V=SSwffffffSjSijiijSjSijiijVjSijiij=-+-=-,0w122割切割切-定理定理6.1证明证明1证明证明wffSjSijiij=-,又0fijcijfijfjifijcij因为割切是任意的,所以得证。
=-=SjSiijSjSijiijcffw,C(S,)S133Ford-Fulkerson最大流最小割最大流最小割切定理切定理nn定理6.2:
在一个给定的网络流图上,其最大流量等于其最小割切的容量,即:
maxwminC(S,)S1432F最大流最小切割定理最大流最小切割定理1如果网络的容许流不是最大的,则一定存在一条从s到t的增流路径。
什么样的路径什么样的路径才是才是增流路径增流路径呢?
呢?
1532F最大流最小切割定理最大流最小切割定理2令s,i1,i2,ik,t是一条从s到t的路径Pst,其中:
边的方向是从ij-1到ij的,称为向前边;边的方向是从ij到ij-1的,称为后退边;后退边后退边向前边向前边si1i2ijikt(4,2)(3,2)(3,1)(5,1)(6,2)1632F最大流最小切割定理最大流最小切割定理3如果路径上全部都是向前边,且每条边eij都有fijcij,那么令=min(cij-fij),这时令Pst上每条边的流都增加,结果仍是网络的容许流,但整个路径的流量比原来增加了。
所以Pst是一条增流路径。
=min(cmin(cijij-f-fijij)=1si1i2ijikt(4,2)(3,2)(3,1)(5,1)(6,2)(cij,fij)(4,3)(3,3)(3,2)(5,2)(6,3)1732F最大流最小切割定理最大流最小切割定理4如果路径上有向前边也有后退边,则在向前边中,令1=min(cij-fij),2=minfji,=min(1,2),这时令Pst上每条向前边的流都增加,后退边减少,结果仍是网络的容许流,但整个路径的流量比原来增加了。
=min(=min(11,22)=2si1i2ijikt(4,1)(3,2)(3,0)(5,1)(6,2)(cij,fij)(4,3)(3,0)(3,2)(5,3)(6,4)1832F最大流最小切割定理最大流最小切割定理5注:
网络里只存在上述的两类增流路径。
1932F最大流最小切割定理例最大流最小切割定理例求下图的最大流。
例例sabcdt11222112032F最大流最小切割定理例解最大流最小切割定理例解1如果最初的fij0,即w0,如下图所示:
解解sabcdt(1,0)(1,0)(2,0)(2,0)(2,0)(1,0)(1,0)2132F最大流最小切割定理例解最大流最小切割定理例解2则发现的第一条增流路径可以是:
(s,c,b,t)解解sabcdt(1,0)(1,0)(2,0)(2,0)(2,0)(1,0)(1,0)2)2)2)它全部由向前边组成,且2,所以可增流2。
2232F最大流最小切割定理例解最大流最小切割定理例解3第二条增流路径是:
(s,a,b,c,d,t)解解sabcdt(1,0)(1,0)(2,2)(2,2)(2,2)(1,0)(1,0)它由向前边和后退边组成。
1=1,2=2,=min(1,2)=1,所以此路径可增流1。
(1,1)(1,1)(2,1)(1,1)(1,1)2332F最大流最小切割定理例解最大流最小切割定理例解4在图中再也找不到增流路径,所以这时的网络流最大流量w3。
解解sabcdt(1,1)(1,1)(2,2)(2,1)(2,2)(1,1)(1,1)2442F最大流最小切割标号算法最大流最小切割标号算法1962年,Ford和Fulkerson对于求最大网络流给出了一个有效算法,我们简称为2F算法算法。
nn算法包括两个过程:
(1)标号过程;
(2)增流过程;2542F最大流最小切割标号算法最大流最小切割标号算法1nn标号的约定:
ll源点s标号:
标以(-,);ll正向标号:
如果e=(vi,vj)且fijcij,顶点vi得到标号(vi+,ij),ijcij-fij;ll反向标号:
如果e=(vj,vi)且fji0,顶点vi得到标号(vi-,ij),ijfji;如果顶点关联的边为饱和边饱和边,则无需标号2642F最大流最小切割标号算法最大流最小切割标号算法2nn什么是饱和边?
向前边:
fijcij时后退边:
fij0时称为饱和边饱和边;2742F标号算法描述标号算法描述nn2F算法描述:
(1)初始化f(e)=0,eE;/初始化
(2)给源点s标号(-,),其它顶点均未标号;(3)依次选一个未标号的顶点,根据其方向进行标号,若当前标号的顶点为t,转(4),否则转入(6);(4)选择一条标号过的增流路径进行增流;(5)转
(2)(6)这时得到的f就是最大容许流。
2842F标号算法例标号算法例用2F标号算法求下图的最大流。
例例sabct957243862942F标号算法例解标号算法例解1
(1)对所有eE,有f(e)=0;解解sabct(9,0)(5,0)(7,0)(2,0)(4,0)(3,0)(8,0)(6,0)3042F标号算法例解标号算法例解2
(2)给源点s标号(-,),其它顶点均未标号;解解sabct(9,0)(5,0)(7,0)(2,0)(4,0)(3,0)(8,0)(6,0)(-,)3142F标号算法例解标号算法例解3(3)选可进行正向或反向标号的顶点进行标号,若当前标号的顶点为t,转(4),如果没有这样的顶点可选时,转入(6);解解sabct(9,0)(5,0)(7,0)(2,0)(4,0)(3,0)(8,0)(6,0)(-,)(s+,22)(b+,44)(a+,77)(c+,55)3242F标号算法例解标号算法例解4(4)对标号过的增流路径进行增流;增流路径为:
(s,a,b,c,t)解解sabct(9,0)(5,0)(7,0)(2,0)(4,0)(3,0)(8,0)(6,0)(-,)(s+,22)(b+,44)(a+,77)(c+,55)(2,2)(7,2)(4,2)(5,2)=min(cij-fij)=23342F标号算法例解标号算法例解5(5)转
(2)
(2)给源点s标号(-,),其它顶点均未标号;解解sabct(9,0)(5,2)(7,2)(2,2)(4,2)(3,0)(8,0)(6,0)(-,)3442F标号算法例解标号算法例解6(3)选可进行正向或反向标号的顶点进行标号,若当前标号的顶点为t,转(4),如果没有这样的顶点可选时,转入(6);解解sabct(9,0)(5,2)(7,2)(2,2)(4,2)(3,0)(8,0)(6,0)(-,)(s+,99)(a+,88)(b+,66)3542F标号算法例解标号算法例解7(4)对标号过的增流路径进行增流;增流路径为:
(s,b,a,t)解解sabct(9,0)(5,2)(7,2)(2,2)(4,2)(3,0)(8,0)(6,0)(-,)(s+,99)(a+,88)(b+,66)(8,6)(9,6)(6,6)=min(cij-fij)=63642F标号算法例解标号算法例解8(5)转
(2)
(2)给源点s标号(-,),其它顶点均未标号;解解sabct(9,6)(5,2)(7,2)(2,2)(4,2)(3,0)(8,6)(6,6)(-,)3742F标号算法例解标号算法例解9(3)选可进行正向或反向标号的顶点进行标号,若当前标号的顶点为t,转(4),如果没有这样的顶点可选时,转入(6);解解sabct(9,6)(5,2)(7,2)(2,2)(4,2)(3,0)(8,6)(6,6)(-,)(s+,33)(b-,22)(a+,22)3842F标号算法例解标号算法例解10(4)对标号过的增流路径进行增流;增流路径为:
(s,b,a,t)解解sabct(9,6)(5,2)(7,2)(2,2)(4,2)(3,0)(8,6)(6,6)(-,)(s+,33)(b-,22)(a+,22)1=min(cij-