- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
浅谈基于分层思想的网络流算法
上海市延安中学 王欣上
[关键字]
层次图 网络流 基本算法 应用
MPLA Dinic MPM
[摘要]
本文详细地介绍了基于层次图概念的三种算法,并通过例题来说明Dinic算法在信息学竞赛中的优越性。
[目录]
一、引言 3
二、预备概念 3
2.1剩余图的概念 3
2.2顶点的层次 4
2.3层次图的概念 4
2.4阻塞流的概念 5
三、最短路径增值算法(MPLA)的步骤及复杂度分析 5
3.1算法步骤 5
3.2定理的证明 6
3.3复杂度分析 8
四、Dinic算法的步骤以及复杂度分析 9
4.1算法步骤 9
4.2复杂度分析 13
五、Dinic算法在信息学竞赛中的应用 15
例题1 最大获利(profit) 15
例题2 矩阵游戏 18
六、MPM的算法步骤以及复杂度分析 19
6.1算法步骤 19
6.2复杂度分析 20
七、总结 21
[正文]
引言
图论这门古老而又年轻的学科在信息学竞赛中占据了相当大的比重。其中,网络流算法经常在题目中出现。网络流涵盖的知识非常丰富,从基本的最小割最大流定理到网络的许多变形再到最高标号预流推进的六个优化等等,同学们在平时需要多多涉猎这方面的知识,不断积累,才能应对题目的各种变化。
随着信息学竞赛的不断发展,其题目的难度以及考察范围都不断增大。现在,对于一些新出现的题目,仅仅掌握最朴素的网络流算法并不足以解决问题。本文针对一些数据规模比较大的网络流题目详细介绍了基于分层思想的3个网络流算法,并通过列举和比较说明了其在解题中的应用,而对一些基础的知识,如最小割最大流定理等,没有作具体阐释,大家可以在许多其他网络流资料中找到。
二、预备概念
2.1剩余图的概念
给定一个流量网络、源点、汇点、容量函数,以及其上的流量函数。我们这样定义对应的剩余图:剩余图中的点集与流量网络中的点集相同,即。对于流量网络中的任一条边,若,那么边,这条边在剩余图中的权值为;同时,若那么边,这条边在剩余图中的权值为。
我们可以发现,流量网络中的每条边在剩余图中都化作一条或二条边。剩余图中的每条边都表示在原流量网络中能沿其方向增广。剩余图的权值函数表示在流量网络中能够沿着的方向增广大小为的流量。所以在剩余图中,从源点到汇点的任意一条简单路径都对应着一条增广路,路径上每条边的权值的最小值即为能够一次增广的最大流量。
2.2顶点的层次
在剩余图中,我们把从源点到点的最短路径长度称作点的层次,记为。源点的层次为0。在下面这张剩余图中:
每个点旁边的数字即表示该点在图中的层次。
2.3层次图的概念
我们这样定义层次图:对于剩余图中的一条边,当且仅当时,边;
直观地讲,层次图是建立在剩余图基础之上的一张“最短路图”。从源点开始,在层次图中沿着边不管怎么走,经过的路径一定是终点在剩余图中的最短路。
2.4阻塞流的概念
在流量网络中存在一可行流,当该网络的层次图中不存在增广路时,我们称流函数为层次图的阻塞流。
三、最短路径增值算法(MPLA)的步骤及复杂度分析
3.1算法步骤
1、初始化流量,计算出剩余图
2、根据剩余图计算层次图。若汇点不在层次图内,则算法结束
3、在层次图内不断用bfs增广,直到层次图内没有增广路为止
4、转步骤2 之前我们讲到的层次图将被应用在最短路径增值算法中。首先,我们看一下最短路径增值算法的步骤:
算法中,2、3步被循环执行,我们将执行2、3步的一次循环称为一个阶段。每个阶段中,我们首先根据剩余图建立层次图,然后不断用bfs在层次图内增广,寻找阻塞流。增广完毕后,进入下一个阶段。这样不断重复,直到汇点不在层次图内出现为止。汇点不在层次图内意味着在剩余图中不存在一条从源点到汇点的路径,即没有增广路。
在程序实现的时候,层次图并不用被“建”出来,我们只需对每个顶点标记层次,增广的时候,判断边是否满足这一约束即可。
3.2定理的证明
定理:对于有n个点的流量网络,在最短路径增值算法中,最多有n个阶段。
也就是说,在算法中层次图最多被建立n次。证明这个定理有助于我们进行算法复杂度分析。
证明:
在建立完层次图以后,假设从源点到汇点的最短路径长度为k,我们将层次图中所有的点分到k+1个集合中,第i个集合为,如下图所示:
在剩余图中,存在着2类边。
第一类:从第个集合中的顶点连到第个集合中的顶点
第二类:从第个集合中的顶点连到第个集合中的顶点
在层次图中,只存在第一类边,这是由层次图的性质决定的。我们所要找的增广路中的边也必定是第一类边。
当我们对一条增广路径增广后,会删除一条或多条增广路中的饱和边,也就是第一类边;而同时会在剩余图中加入一些与增广路径中的边反向的边。这些新加入的边一定是第二类边。如下图所示,在剩余图(a)中,找到一条从左向
文档评论(0)