最大流标号法
- 格式:ppt
- 大小:1.99 MB
- 文档页数:31
求解网络最大流问题的标号算法赵礼峰;白睿;宋常城【摘要】It provides a new way-labeling algorithm to solve network flow. Every vertex is labeled and vertex has the same number in arc as grades. Choose the way that has a grade. After every way that has only a grade,choose the way that has bigger arc capacity and shorter path. The algorithm is easy to understand and avoids the shortcomings of several labeling and adjusting process through improving Ford-Fulkerson labeling algorithm. The algorithm improves efficiency to solve the maximum network flow. The algorithm gives specific steps and manifests the practices of the algorithm through example.%给出了一种新的求解网络流问题的标号算法,对每个顶点进行标号,顶点有几个人弧,即有几个标号,每次在选择路径时先选取只有一个标号的路径,当所有单标号的路径走完时,再按照弧容量较大且最短的路径选择增广链.通过对Ford-Fulkerson标号算法进行改进,使得该算法容易理解,且又避免了Ford-Fulkerson标号算法在求解网络最大流问题时需经过多次的调整与标号,从而大大提高了求解最大流执行的效率.该算法通过实例给出了具体算法步骤并且表明了算法的实用性.【期刊名称】《计算机技术与发展》【年(卷),期】2011(021)012【总页数】3页(P113-115)【关键词】最大流;Ford-Fulkerson标号算法;增广链;标号【作者】赵礼峰;白睿;宋常城【作者单位】南京邮电大学理学院,江苏南京210003;南京邮电大学理学院,江苏南京210003;南京邮电大学理学院,江苏南京210003【正文语种】中文【中图分类】TP301.60 引言在现实生活中,存在着大量的“流”的问题,计算机技术和网络技术的迅速发展使得网络最大流问题在通信、物理、电力等科学领域都得到了广泛的应用。
网络最大流的算法网络最大流的算法分类:一、Ford-Fulkerson增广路方法1、Ford-Fulkerson标号算法(最简单的实现)分别记录这一轮扩展过程中的每个点的前驱与到该节点的增广最大流量,从源点开始扩展,每次选择一个点(必须保证已经扩展到这个点),检查与它连接的所有边,并进行扩展,直到扩展到t。
2、最大容量增广路算法每次找一条容量最大的增广路来增广,找的过程类似Dijkstra,实现起来相当简单。
3、Edmonds-Karp,最短路增广算法的BFS实现每次找一条最短的增广路,BFS是一个可以很方便的实现思想。
4、距离标号算法最短路增广的O(n)寻找实现,使用距离函数d:d[t]=0;d<=d[j]+1若存在(i,j)∈E;只有路径上满足d=d[i+1]+1的增广路才为满足要求的,一开始我们初始化使标号恰好满足要求,之后不断更改标号使其可以使增广继续。
5、Dinic,分层思想对网络分层(按照距t的距离),保留相邻层之间的边,然后运用一次类似于距离标号的方法(其实质是DFS)进行增广。
二、预留与推进算法1、一般性算法随便找个点,要么将他的盈余推出去,要么对他进行重标记,直至无活跃点为止。
2、重标记与前移算法维护一个队列,对一个点不断进行推进与重标记操作,直至其盈余为0,若过程中他没有被重标记过,则可出列,否则加入队头,继续等待检查。
3、最高标号预留与推进算法记录d值,然后优先处理d值较高的,直至没有盈余。
网络最大流的算法实现一、Edmonds-Karp(EK)算法就是用广度优先搜索来实现Ford-Fulkerson方法中对增广路径的计算,时间复杂度为O(VE2),Shortest Augmenting Path (SAP) 是每次寻找最短增广路的一类算法,Edmonds - Karp 算法以及后来著名的Dinic 算法都属于此。
SAP 类算法可统一描述如下:Shortest Augmenting Path{ x <-- 0while 在残量网络Gx 中存在增广路s ~> t do{ 找一条最短的增广路径Pdelta <-- min{rij:(i,j) 属于P}沿P 增广delta 大小的流量更新残量网络Gx}return x}在无权边的有向图中寻找最短路,最简单的方法就是广度优先搜索(BFS),E-K 算法就直接来源于此。
最大流问题标号法例题详解最大流问题标号法例题详解本文以一道标号法求解最大流问题的例题胶加以详细讲解,帮助读者了解其原理及运算步骤。
题目如下:给定一个网络结构如下:s (源点) 0----1----2----3----4---- t (汇点)a 25 10 12 15 20其中 s 是源点,t是汇点,aij(i,j=0,1,2,3,4)是每条弧的容量,求整个网络的最大流量。
解:1、设置标号:在最大流问题中,为了求解最大流,最常用的方法是标号法。
首先,要设置各结点标号,因为本题中有5个结点,s源点的标号为0,t汇点标号为4,其他结点即1,2,3依次标号,标号的设定不仅便于求解,而且可以在初始化的时候使用。
2、初始化标号:初始化标号即将各结点初始化为两个空集合{},即各结点的访问和未访问标号都是空集合,即无访问的结点标号为{},访问过的结点标号也为{}。
3、依据标号法,从源点(s=0)计算,得出每条弧的剩余容量Cij,具体推导如下:源点0 1 2 3 41 0 25 10 12 152 0 0 10 7 103 0 0 0 8 104 0 0 0 0 20其中:Cij=aij-fij (i,j=0,1,2,3,4)其中,aij 为每条弧的容量,fij 为每条弧的流量,在初始情况下,fij=0,故Cij=aij。
4、找增广路径:从源点s开始,用深度优先搜索法查找从s到t的增广路径,具体步骤如下:设置一个数组P[i]用以记录路径,P[i]表示从s到i节点所经过的上一个结点,先从源点s开始,P[0]=-1,然后查找s出发可以到达的结点,若Cij>0,则有路可达,将P[j]=i(j为s出发可达的结点),接着查找j出发可以到达的结点(该结点未被访问过)若Cjk>0,则有路可达,把P[k]=j,以此类推,直到找到P[t]=-1,即从s到t 的一条增广路径找到,这条增广路径的路径上的容量称为Cmin,它是该增广路径上各结点之间的容量最小值。