网络最大流问题算法研究【文献综述】
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文献综述
数学与应用数学
网络最大流问题算法研究
最大流问题是指在一定的条件下,要求流过网络的物流、能量流、信息流等流量为最大的问题[2].最大流问题已有50多年的研究历史,这段时期内,人们建立了最大流问题较为完善的理论,同时开发了大量的算法.如Ford和Fulkerson增截轨算法、Dinic阻塞流算法、Goldberg推进和重标号算法[6]以及Goldberg和Rao的二分长度阻塞流算法等等,这些经典算法及相关技术对网络最大流问题的研究起到了非常重要的推动作用.近年来,随着计算机科学技术和网络的快速发展,网络最大流问题得到了更深入的研究,并极大地推动了最大流问题的研究进展.然而,研究工作仍未结束:首先,在理论算法研究方面,人们还没有发现最大流问题算法时间复杂度的精确下界,更没有任何一个通用算法达到或接近问题的下界; 其次,在算法的实际性能方面,目前算法的实际性能也不能满足许多应用问题的要求; 同时,最大流问题作为特殊的线性规划问题, 它远比一般线性规划问题容易解决,发现应用领域中的问题和最大流问题的联系可以使应用问题更好地得到解决.因此,关于网络最大流问题的研究具有十分重要的理论意义和实用价值[5].
最早的算法是Dantzig[6]提出的网络单纯刑法和Ford和Fulkerson的增载轨算法,
他们都是伪多项式时间算法,分别由Dinic、Edmonds和Karp等提出.1973年Dinic首
次获得了时间复杂度的核心因子为nm算法.以后的几十年中,最大流算法获得了很
大的进展.
本文主要介绍的是网络最大流的几种主要算法,其中重点介绍了标号算法的详细
过程,其后给出了其在实际中的应用实例,后面介绍了现有的几种主要算法,虽然没
有给出具体的程序,但本文目的主要是了解最大流问题的解决思想,读者对网络流算
法有更深刻的认识,读者要想了解更多关于最大流问题的研究,详细可以参照Goldberg等人的研究成果, 这些程序在网上都可以轻松得到. 在这里就不再详细讲述.
下面简要介绍一下增载轨算法.
增载轨算法[5]: 沿剩余网络中从源到汇的有向路径推进流. 增载轨算法包括Ford
和Fulkerson 的标号算法、Dinic 的阻塞流算法、Ahuja 和Orlin 的最短增载轨算法等. 1956年, Ford 和Fulkerson 首次发现增载轨算法. 由于Ford 和Fulkerson [3]算法是在剩余网络中任意选择从源到汇的有向路径作为增载轨的, 增载轨的数量可能很多, 最坏情况为()nU O . 因此, Ford 和Fulkerson 算法的时间复杂度为()nmU O , 它是伪多项式时间的. 通过两种好的选择策略可以限制增载轨的数量. 意识每次都选择容量最大的增载轨, 可以把增载轨的数量降为(log )m U O . 但寻找容量最大的增载轨花的代价较大. 另一种策略是每次选择长度最短的增载轨, 使用这种策略可以使增载轨的数量限制在()nm O , Edmonds 和Karp 的最短增载轨算法利用宽度优先搜索在剩余网络中寻找最短增截轨, 该算法的时间复杂度为2()nm O . 为了把上一次构造最短路径的距离信息保留下来提供下一次使用, Dinic 引入了层次网络的阻塞流的概念, Dinic 算法的时间复杂度为2()n m O . Ahuja 和Orlin 采用Goldberg 和Tarjan 引进的距离标号概念构造增载轨, 并改用重标号的方法保留上次构造的距离信息, 这种算法的时间复杂度为2()n m O . Ahuja, Magnanti 和Orlin 在他们的著作中指出Dinic 阻塞流算法可以看作Ahuja 和Orlin [8]最短增载轨算法的一个实现.将容量和最短增载轨结合起来使用, 可以得到(log )nm U O 时间的算法. 1983年, Sleator 和Tarjan 提出了动态树的数据结构并用它实现了Dinic 算法, 使得该算法的时间复杂度降为(log )
nm n O [5]. 下面看一下本文要主要介绍的标号算法的情况:
定理1[1] 设f 为网络(,,)D V A C =的任一可行流, 流量为f V , (,)S S -
为分离s v , t v 的任一割集, 则有(,)f V C S S -
≤.
定理2[1] Ford-Fulkerson 定理(也称最大流-最小割定理): 在任何网络(,,)D V A C =中, 从s v 到t v 的最大流的流量等于分离s v , t v 的最小割集的容量.
下面介绍的是最大流问题的增广链算法, 步骤为:
1、 通过寻找剩余网络中从发点到收点的正项链中每个弧上都有非零剩余容量的链而找到
增广链(如果不存在增广链, 该网络已达到最大流).
2、 找出增广链中弧的最小剩余容量c *, 这就是该增广链的剩余容量, 在该增广链中增加流
量为c*的流.
3、在增广链的每个正向弧的剩余容量中减去c*, 而在每个反向弧的剩余容量中加上c*.
返回步骤1.
在进行步骤1时, 往往会碰到很多增广链可供选择, 在用这种方法来解决大规模问题时,增广链的正确选择对解决问题的效率是至关重要的.
上面说的只是网络最大流问题算法中的一个, 本文将讲述网络最大流问题的几种主要算法, 主要是标号法, 还包括ISAP算法、SAP算法等.
对于一个网络最大流问题, 现在有很多求解方法, 如重标号算法、预流推进算法等[6]. 对一个最大流问题也可以用线性规划方法求解, 也就是说, 将一个最大流问题转化为一个线性规划模型, 再用单纯形法求解. 有些情况下运用线性规划模型求解很方便, 而且易于理解[7].
这几十年来, 很多著名学者开发出了很多优秀的算法, 由R. K. Ahuja和B. Orlin提出的快速算法是基于Goldberg和Tarjan的算法而得到的一个平行算法, 即预流推进算法[8]. 其对后面学者的研究起了很大的指导作用. 在具有适宜整数边容量的稀疏图中, Gabow的缩进算法是最好的. 而基于Dinic算法结构的那些算法中, 唯一的一个平行算法是由Shiloach和Vishkin给出. Goldberg给出了基于Karzanov预流思想的新算法, 即在剩余网络中寻找最短路径[8]. Gallo和Tarjan等提出通过重优化技术能解决参数最大流中的很多问题, 其是对Goldberg和Tarjan的推重标号法进行的拓展, 进一步优化了最大流问题算法[9].
由Ford和Fulkerson提出的增广链算法是基础, Edmonds和Karp提出的另外一个方法是始终沿着最短路径增广, 它利用的是广度优先搜索思想, 这种算法存在一个最坏运行时间. 还有Dinic独自提出的最短路径增广等算法, 这些都对最大流问题的算法研究产生了巨大的影响[10].
一直以来,网络最大流的应用都是一项十分有意义的研究工作, 网络流问题的研究者和具体问题的工程师从不同的角度充实着这方面的研究.实践表明, 对许多实际应用问题,如果能找到它和最大流问题的联系, 就可以使问题得到十分有效的解决. 许多应用问题所对应的最大流问题都有比较明显的特征, 充分利用这些特征和挖掘网络特性, 解析典型算法, 充分设计面向应用问题的算法, 这将是网络最大流问题组合算法研究的重要趋势.