最小割模型的应用.ppt
《最小割模型的应用.ppt》由会员分享,可在线阅读,更多相关《最小割模型的应用.ppt(90页珍藏版)》请在三一办公上搜索。
1、网络流 最小割模型的应用,一引例二基本概念三三个重要问题四经典例题欣赏,2023年4月22日星期六,2,一引例:运输方案UVA1069,如图为连接产品产地V1和销地V6的交通网,每一条边(Vi,Vj)表示从Vi到Vj的运输线,产品经这条边由Vi输送到Vj,边上的数字表示这条运输线的最大通行能力(简称容量)。产品经过交通网从V1输送到V6,现要求制定一个输送方案,使得从V1运到V6的产品数量最多。,2023年4月22日星期六,3,如图为一个可行的输送方案,边上的数字表示该运输线的实际运输量(单位:吨)。该运输方案表示:2吨产品沿有向路P1(V1,V2,V4,V6)运到销地;1吨产品沿有向路P2(
2、V1,V2,V5,V6)运到销地;2吨产品沿有向路P3(V1,V3,V5,V6)运到销地。总共有5吨产品从V1运到V6。,2023年4月22日星期六,4,一引例:运输方案UVA1069,算法分析与设计 可行的运输方案必须满足以下三个条件:(1)实际运输量不能是负的;(2)每条边的实际运输量不能大于该边的容量;(3)除了起点V1和终点V6,对其他顶点(中间点)来说,不能囤积物资,即运到它那儿的物资是多少,从它那儿运走的物资也应该是多少。思考:如何改进运输方案?即根据这个运输网,是否可增大运输量?,2023年4月22日星期六,5,一引例:运输方案UVA1069,我们找到一条有向路P4(V1,V2,
3、V3,V4,V6)可再增加1吨物资运输量,改进的方案如图所示:,2023年4月22日星期六,6,一引例:运输方案UVA1069,观察有向路P6(V1,V3,V2,V4,V6)中,将正方向的边(V1,V3)、(V2,V4)、(V4,V6)都可增加运输量,而反方向的边(V3,V2)的运输量为1,现将反向边(V3,V2)的运量调到正向边(V2,V4)上去完成,这样有向路P6(V1,V3,V2,V4,V6)的运量可增加1。,2023年4月22日星期六,7,一引例:运输方案UVA1069,至此,再找不到可“改进”的有向路了,所以,该交通网的最大运输量为8吨。,2023年4月22日星期六,8,一引例:运输
4、方案UVA1069,本题小结 通过上述实例分析,包含了流量因素的问题,是一类特殊的图。引例给出的交通网其具体的物理模型是多种多样的。例如网络的有向边可以表示为城市之间的公路、电信网之间的通讯线路、天然气站之间的输气管道等;边的容量则可以表示为允许通过的物资数量、汽车数量、速率或最大信号流量等。这一类特殊的图,称为网络流图。网络流图中需要解决的基本问题有最大流问题、最大流最小割问题、最小费用最大流问题等。,2023年4月22日星期六,9,一引例:运输方案UVA1069,二基本概念:什么是流网络,流网络G=(V,E)是一个有向图,其中每条边(弧)(u,v)E均有一个非负容量c(u,v)=0。如果(
5、u,v)不属于E,则假定c(u,v)=0。流网络中有两个特别的顶点:源点s和汇点t。一个流网络的实例(红色数字表示边的最大容量,蓝色数字表示边上的实际流量):,2023年4月22日星期六,10,二基本概念:什么是流,对一个流网络G=(V,E),每条边(u,v)上给定一个实数f(u,v),满足:0=f(u,v)=c(u,v),则f(u,v)称为边(u,v)上的流量。其中满足f(u,v)=c(u,v)的边称为饱和边。如果有一组流量满足条件:源点s:流出量=整个网络的流量 汇点t:流入量=整个网络的流量 中间点:总流入量=总流出量 那么整个网络中的流量成为一个可行流。整个流网络G的流量为:|f|=f
6、(s,v)(vV)或|f|=f(u,t)(uV)即从源出发的所有流的总和或到达汇的所有流的总和,2023年4月22日星期六,11,二基本概念:什么是流,三个重要性质 容量约束:对所有的u,vV,要求f(u,v)=c(u,v);平衡约束(反对称性):对所有的u,vV,要求f(u,v)=-f(v,u);流守恒性:对所有uV-s,t,要求f(u,v)=0(vV)。(流量平衡方程),2023年4月22日星期六,12,二基本概念:什么是最大流,对于一个流网络G=(V,E),在其可行流中,流量最大的一个流即最大流。最大流可能不止一个。如右图中可行流7也是最大流。,2023年4月22日星期六,13,一个可行
7、流:5,一个可行流:7,二基本概念:什么是残留网络,在给定的流网络G=(V,E)中,设f为G中的一个流,并考察一对定点u,vV,在不超过容量c(u,v)的条件下,从u到v之间可以压入的额外网络流量,即(u,v)的残留容量,记为Gf=(V,Ef)。定义cf(u,v)为残留网络Gf中边(u,v)的容量。如果弧(u,v)E或弧(v,u)E,则(u,v)Ef,且cf(u,v)=c(u,v)-f(u,v)。而由所有属于G的边的残留容量所构成的带权有向图就是G的残留网络。,2023年4月22日星期六,14,二基本概念:什么是增广路径,增广路径为在残留网络Gf中从s到t的一条简单路径。若边(u,v)的方向与
8、该路径的方向一致,称(u,v)为正向边(正向弧),正向边的全体记为P+;若边(u,v)的方向与该路径的方向相反,称为逆向边(反向弧),逆向边的全体记为P-。增广路径上所有的边满足:对所有正向边有:f(u,v)0,即P-中的每一条边都是非零流边。将增广路径中最大量为p的残留网络定义为:cf(p)=mincf(u,v)|(u,v)在增广路径上,2023年4月22日星期六,15,二基本概念:什么是增广路径,2023年4月22日星期六,16,简单路径:13245中,(1,3)(2,4)(4,5)是正向边,(3,2)是逆向边。,二基本概念:什么是增广路径,2023年4月22日星期六,17,已形成1235
9、和1245两条路径余下两条增广路径:135 13245增加流量=?2+2=4,1,2,3,4,5,4,3,2,6,2,5,2,4,2,2,2,2,s,t,二基本概念:什么是割,2023年4月22日星期六,18,割(CUT)是流网络中顶点的一个划分,它把流网络G(V,E)中的所有顶点划分成两个顶点集合S和T(T=V-S),其中源点sS,汇点tT,记为CUT(S,T)。如果一条边(弧)的两个顶点分别属于顶点集S和T(即一个顶点在S中,另一个顶点在T中),那么这条边称为割CUT(S,T)的一条割边。从S指向T的割边是正向割边;从T指向S的割边是逆向割边。割CUT(S,T)中所有正向割边的容量之和称为
10、割CUT(S,T)的容量。不同割的容量不同。,二基本概念:什么是割,2023年4月22日星期六,19,顶点集合S=1,2,3和T=4,5构成一个割。割的容量为:3+4=7。,1,2,3,4,5,4,3,2,6,2,5,4,4,3,1,1,3,s,t,源点:s=1;汇点:t=5。框外是容量,框内是流量。,二基本概念:什么是割,2023年4月22日星期六,20,1,2,3,4,5,4,3,2,6,2,5,4,4,3,1,1,3,s,t,顶点集合S=1,3和T=2,4,5构成一个割。正向割边:12;35逆向割边:23,割的容量:4+4=8割的正向流量:4+2=6逆向割的流量:1,二基本概念:什么是割
11、,2023年4月22日星期六,21,1,2,3,4,5,4,3,2,6,2,5,4,4,3,1,1,3,s,t,顶点集合S=1,3,5和T=2,4能否构成一个割?,二基本概念:什么是割,2023年4月22日星期六,22,顶点集合S=1,3,4和T=2,5能否构成一个割?同构变形,三三个重要问题:最大流问题,最大流定理 根据可行流f为最大流,当且仅当不存在关于f的增广路径。证明:若f是最大流,但图中存在关于f的增广路径,则可以沿该增广路径增广,得到的是一个更大的流,与f 是最大流矛盾。所以,最大流不存在增广路径。增广路定理 当且仅当由当前的流f压得的残留网络中不存在增广路径时,流f的流量|f|达
12、到最大。,2023年4月22日星期六,23,三三个重要问题:最大流问题,Ford-Fulkerson方法 根据增广路定理,我们可以设计出最基本的求最大流的方法Ford-Fulkerson方法。开始将流网络G=(V,E)中的流f置为零流,即对于(u,v)E时,f(u,v)=0。然后构建残留网络,寻找增广路径增广,再修改残留网络,重复此过程,直到无法找到增广路径。具体步骤如下:(1)如果存在增广路径,就找出一条增广路径;(2)然后沿该条增广路径进行更新流量(增加流量)。,2023年4月22日星期六,24,三三个重要问题:最大流问题,2023年4月22日星期六,25,开始流量为:sum=0,一条增广
13、路径:1235d=min4,2,4=2增加流量:2sum=2,s,t,s,t,三三个重要问题:最大流问题,2023年4月22日星期六,26,一条增广路径:1245d=min4-2,3,5=2增加流量:2sum=2+2=4,1,2,3,4,5,4,3,2,6,2,5,2,4,2,s,t,1,2,3,4,5,4,3,2,6,2,5,2,4,2,s,t,2,2,2,三三个重要问题:最大流问题,2023年4月22日星期六,27,1,2,3,4,5,4,3,2,6,2,5,2,4,2-1=1,s,t,2,2,2,1,2,3,4,5,4,3,2,6,2,5,2,4,2,s,t,2,2,2,1,1,1,一条
14、增广路径:13245d=min6,2,3-2,5-2=1增加流量:1sum=4+1=5,23减少1,加到2423减的1由13补充1,三三个重要问题:最大流问题,2023年4月22日星期六,28,1,2,3,4,5,4,3,2,6,2,5,2,4,2-1=1,s,t,2,2,2,1,1,1,一条增广路径:135d=min6-1,4-2=2增加流量:2sum=5+2=7,1,2,3,4,5,4,3,2,6,2,5,2,4,2-1=1,s,t,2,2,2,1,1,1,2,2,三三个重要问题:最大流问题,基于DFS的Ford-Fulkerson方法找一条增广路径:1、先设d为为正无穷(d为可增加流)若
15、(u,v)是正向边:d=min(d,c(u,v)-f(u,v)若(u,v)是逆向边:d=min(d,f(u,v)2、对与该增广路径上的边 若(u,v)是正向边,f(u,v)=f(u,v)+d;若(u,v)是逆向边,f(u,v)=f(u,v)-d;增广后,总流量增加了d。,2023年4月22日星期六,29,三三个重要问题:最大流问题,Ford-Fulkerson方法的伪代码:Ford-Fulkerson(G,s,t)1 for each edge(u,v)EG/初始化 2 do fu,v0 3 fv,u0 4 while there exists a path p from s to t in
16、the residual network Gf 5 do cf(p)mincf(u,v)|(u,v)is in p 6 for each edge(u,v)in p 7 do fu,vfu,v+cf(p)8 fv,ufv,u-cf(p),2023年4月22日星期六,30,三三个重要问题:最大流问题,Ford-Fulkerson方法核心:第48行的while循环反复找出Gf中的增广路径p,并把沿p的流f加上其残留容量cf(p)。当不再有增广路径时,流f就是一个最大流。设n=|V|,m=|E|,U表示增广次数,则理论时间复杂度:O(nmU)。参考程序片段见flow_FF.pas。,2023年4月2
17、2日星期六,31,三三个重要问题:最大流问题,基于BFS的Edmonds-Karp(EK)算法找一条增广路径:EK算法是基于Ford-Fulkerson方法,唯一的区别是从第4行开始用BFS(宽搜)来实现对增广路径p的计算。对于EK算法,每次用一遍BFS寻找从源点s到汇点t的最短路作为增广路径,然后增广流量f并修改残量网络,直到不存在新的增广路径。EK算法的理论时间复杂度为:O(nm2),由于BFS要搜索全部小于最短距离的分支路径之后才能找到终点,因此频繁的BFS效率是比较低的。类似用BFS实现的还有Dinic算法。参考程序片段见flow_EK.pas和flow_Dinic.pas。,2023
18、年4月22日星期六,32,三三个重要问题:最大流问题,基于SAP算法(最短增广路算法)找一条增广路径:(1)定义距离标号为到汇点距离的下界。(2)在初始距离标号的基础上,不断沿可行弧找增广路增广,一般采用DFS深度优先。可行弧定义为:(i,j)|hi=hj+1(3)遍历当前节点完成后,为了使下次再来的时候有路可走,重标号当前节点为:minhj|(i,j)+1(注意要满足距离标号的性质:不超过真实距离),2023年4月22日星期六,33,三三个重要问题:最大流问题,(4)重标号后当前节点处理完毕。当源点被重标号后,检查其距离标号,当大于顶点数时,图中已不存在可增广路,此时算法结束;否则再次从源点
19、遍历。(5)理论时间复杂度为:O(n2m)。,2023年4月22日星期六,34,三三个重要问题:最大流问题,2023年4月22日星期六,35,开始流量为:sum=0所有结点的标号为:0,对1号结点进行重标号形成一条路径:12,s,t,s,t,0,0,0,0,0,1,0,0,0,0,三三个重要问题:最大流问题,2023年4月22日星期六,36,2号结点无法向外流通,对2号结点进行重标号,12的路径无法再形成通路,13形成通路,3号结点无法向外流通,对3号结点进行重标号,13的路径无法再形成通路,s,t,s,t,1,1,0,0,0,1,1,0,1,0,三三个重要问题:最大流问题,2023年4月22
20、日星期六,37,再次回到1号结点进行重标号,一条增广路径:135,s,t,s,t,2,1,0,1,0,2,1,0,1,0,三三个重要问题:最大流问题,初始标号初始化时全部设为0。理论上可以写出许多子程序并迭代实现,但判断琐碎,没有层次,实践中用递归简单明了,增加的常数复杂度比起SAP速度微乎其微却极大降低编程复杂度,易于编写调试。,2023年4月22日星期六,38,三三个重要问题:最大流问题,GAP优化 注意到在某次增广后,最大流可能已经求出,因此算法做了许多无用功。可以发现,距离标号是单调增的。这就启示我们如果标号中存在“间隙”,则图中不会再有可增广路,于是算法提前终止。实践中可以使用数组c
21、ounti记录标号为i的顶点个数,若重标号使得count中原标号项变为0,则停止算法。,2023年4月22日星期六,39,三三个重要问题:最大流问题,2023年4月22日星期六,40,SAP算法的伪代码:SAP-ALGORITHM(G,s,t)1 initialize flow f to 0 2 do BFS to calculate d of each vertex/In fact,we can initialize d to 0.3 i s 4 while d(s)n/n is the amount of vertexes in G 5 if there exists j that(i,j
22、)Ef and d(i)=d(j)+1 6 then do add vertex i into augmenting path p 7 i j 8 if i=t/come to t,三三个重要问题:最大流问题,2023年4月22日星期六,41,8 if i=t 9 then do augment flow f along p 10 i s/go back s to find another way 11 else if there exists j that(i,j)Ef 12 then d(i)mind(j)+1|(i,j)Ef 13 else d(i)n/or 14 if is then
23、do delete i in augmenting path p 15 i last vertex in p 16 return f,三三个重要问题:最小割问题,2023年4月22日星期六,42,流与割的关系 网络流量:5 割的流量:,三三个重要问题:最小割问题,2023年4月22日星期六,43,定理一 如果f是网络中的一个流,CUT(S,T)是任意一个割,那么f的值等于正向割边的流量与负向割边的流量之差。证明:设X和Y是网络中的两个顶点集合,用f(X,Y)表示从X中的一个顶点指向Y的一个顶点的所有弧(弧尾在X中,弧头在Y中:XY)的流量和。只需证明:f=f(S,T)-f(T,S)即可。,三三
24、个重要问题:最小割问题,2023年4月22日星期六,44,推论一 如果f是流网络中的一个流,CUT(S,T)是流网络中一个割,那么f的值不超过割CUT(S,T)的容量。推论二 流网络中的最大流不超过任何割的容量。,三三个重要问题:最小割问题,2023年4月22日星期六,45,定理二 在任何网络中,如果f是一个流,CUT(S,T)是一个割,且f的值等于割CUT(S,T)的容量,那么f是一个最大流,CUT(S,T)是一个最小割(容量最小的割)。,三三个重要问题:最小割问题,2023年4月22日星期六,46,定理三:最大流最小割定理(Ford-Fulkerson定理)在任何的网络中,最大流的值等于最
25、小割的容量。证明一:简单证明 假设f是流网络G=(V,E)的一个最大流。先证明f是G的割:f是G的最大流,根据最大流定理,Gf的残留网络中不存在ST的增广路径=S,T分属两个连通分量=f是G的割。再证f是G的最小割:利用反证法,假设|f1|Gf1残留网络中存在ST的增广路径=S,T不属于两个连通分量=与前提条件不符,故f是G的最小割。,三三个重要问题:最小割问题,2023年4月22日星期六,47,证明二:数学证明(Ford-Fulkerson,1962)存在一个割,其容量=最大流的流量。亦即,具有容量限制的最大流的流量=最小割的容量。由于具有最大流量的流存在,所以我们可以取一个最大流f。递归的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最小 模型 应用
链接地址:https://www.31ppt.com/p-4417171.html