《网络流最大流算法.pptx》由会员分享,可在线阅读,更多相关《网络流最大流算法.pptx(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Network Flow基本性质:对于网络(G,u,s,t)1、容量限制(Capacity Constraints):F(x,y)0b、除s、t点外,图G中的所有点流量守恒注:此处的s-t流不单指图中特定的s-t路s-t流的值:源点s的流出量;2、s-t割:即点集S指向点集T(此处T=V(G)X)的边集,其中sS且tT割的容量:各边容量之和最小s-t割:在G中关于u具有最小容量的s-t割第7页/共28页Maximum Flow-Minimum Cut TheoremDefinition:第8页/共28页Maximum Flow-Minimum Cut Theorem任一个网络(G,u,s,t)
2、中,最大流的流量等于最小割的容量证明:1、任意一个流小于等于任意一个割(S,T),即value(F)=cap(S,T)2、sS,tT当且仅当(S,T)中每条边的f都饱和,而(T,S)中每条边的f都为零时上式取等3、设F为网络的最大流,K为最小割,则value(F)=cap(K);又可证(S,T)中每条边的f都饱和,而(T,S)中每条边的f都为零,故value(F)=cap(K)=cap(K)综上,value(F)=cap(K)第9页/共28页Theorem网络N(G,u,s,t)中的可行流f是N的最大流当且仅当N中不存在f可扩路必要性:若有可扩路P,沿P使f扩大即可充分性:设网络中不存在可扩路
3、令S=vV(G)|从源s到v有f可扩路s,则与最大流最小割定理同样可证K=(S,T)是网络中的一个割,且value(f)=cap(K)设F为最大流,K为最小割,则value(f)=value(F)=cap(K)=cap(K)故f即为最大流,K即为最小割第10页/共28页FordFulkerson算法的劣势:第11页/共28页EdmondsKarp algorithm-最大流问题的第一个多项式时间算法与FordFulkerson算法相比,改进之处在于第二步中P路径的选择,与其任选,不如选最短(边数最少)算法步骤:1、令所有边的流量f=0;2、在 中找条最短可扩路P,若无,则止;3、算出P路中各边
4、剩余容量的最小值r,并沿P使f扩充r,转2;复杂度:EdmondsKarp可在O(m*m*n)内得解EdmondsKarp算法中无论边容量多大,最多增流m*n/2次(m为边数,n为点数)每次增流用BFS最大为O(m)第12页/共28页Dinics algorithmDefinition:分层图(level graph)首先,分层图是基于剩余图的其次,分层图会对所有顶点标号(与s的距离)最后,分层图中只存在这样的剩余边(u,v):dist(v)=dist(u)+1,不符合这一规律的边全部删去第13页/共28页Dinics algorithmDefinition:阻塞流(blocking flow
5、):网络(G,u,s,t)对应的分层图中所有可扩路的并,即为阻塞流第14页/共28页Dinics algorithm算法步骤:1、令所有边的流量f=0;2、构造剩余图的分层图(level graph)3、在分层图中求一个阻塞的s-t流(the blocking flow)f,若f=0,则止4、用f对f扩充,转2复杂度:在一定基础上可达O(mn log n),其中,n为点数、m为边数(详见课本153)第15页/共28页Dinic算法的Example第16页/共28页Dinic算法的Example第17页/共28页Fujishige algorithm传说中的弱多项式算法对简单有向图G以及整容量可
6、在O(mn )时间内正确求解最大流问题,其中n为点数、m为边数、u max为最大边容量(详见课本153)第18页/共28页Fujishige algorithm第19页/共28页Fujishige algorithm简单粗暴的说:1、每一次迭代都从s出发(s即v1),按当前的最大量()往t流a、只能往前流(v1v2v3.),若到达t点,转2b、若途经某边剩余容量流出的点(即超出量0的点)第21页/共28页Pushrelabel maximum flow algorithm(推流-重标算法)Definition:3、距离标号(distance labels,or heights):a、h(s)=
7、n,h(t)=0;(s和t的标号是固定的)b、剩余图中的所有边(u,v),有h(u)=h(v)+1;4、容许(admissible)边:剩余图中的边(u,v),且h(u)=h(v)+1;第22页/共28页Pushrelabel maximum flow algorithm(推流-重标算法)算法步骤:1、令s的出边满流,其余边f=0(也可不置零)2、画出剩余图,令s的高度(height)h(s)=n,其余点h(v)=03、若有活动点,执行:设v为活动点:v点有容许边e,则push(e)v点无容许边,则relabel(v)Push(e)在v点的超出量e(v)与e的剩余容量中选出较小者r沿e使f扩充rRelabel(v)在剩余图的(v,w)中找出高度最小的点w令h(v)=h(w)+1第23页/共28页第24页/共28页第25页/共28页Pushrelabel算法可在O()时间内解决问题(详见课本157)第26页/共28页GomoryHu algorithm未完待续to be continued第27页/共28页感谢您的观看!第28页/共28页
限制150内