网络流2013版分析.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1网络流问题入门 多年来,考察网络流建模和算法的题目越来越多地出现在信息学竞赛中,网络流也已经被确定为信息学培训的重点章节。 网络流问题里的构图是最考验做题人的思维的。题海不可取,总结是必须的。 网络流的学习要在学习代码模板的基础上,深刻理解网络流模型的建立。 1.1网络及网络流 什么是网络?网络其实就是有向带权图。为什么要叫网络,是因为权值是容量,容量意味着可以在单位时间内经过的上限,但是可以比上限小。 有向图=点集+有向边集 一个实例:运输网络 图1.1 网络定义: 一个有向图 G=(V,E); V代表点的集合,E代表边的集合。 有两个特别的点:源点s、汇点t; 图中每条边(u,v)∈E,有一个非负值的容量C(u,v) 记为 G=(V,E,C) 网络三要素:点、边、容量 可行流定义: 是网络G上的一个“流”,即每条边上有个“流量”P(u,v),要满足下面两个条件: 流的容量限制---弧: 对任意弧(u,v)---有向边 流的平衡---点: 除源点和汇点,对任意中间点有:流入u的“流量”与流出u的“流量”相等。即: 有 网络的流量:源点的净流出“流量” 或 汇点的净流入“流量”。即: 注意,我们这里说的流量是一种速率,而不是指总量。联系上面所说的实例,下面是一个流量为1的可行流: 图1.2 标准图示法: 图1.3 1.2、最大流问题 寻找网络G上可能的最大流量(和一个有最大流量的可行流方案),即为网络G上的最大流问题。 我们再来看看图1.1的运输网络例子,我们可能通过改进图1.3得到下面这样的可行流: 图2.1 求解过程中的困惑: [问题2.1]流量还可能增加吗? [问题2.2]如果能增加,怎样改进? 1.3、最大流算法的核心---增广路径 退流的概念---后向弧 仔细分析图2.1,我们发现,流量是可以增加的: 图3.1 把一个流量弧(B,C)和(C,T)上的流退回到B点,改道从B-D-E-T走,就可以增加流量了,如下图: 图3.2 图3.1不能“直接寻找增大流的路径”,是因为当初有些弧上的流选择不“恰当”,要“退流”。 一种直观的想法就是:调整或重新搜索“当初的选择”---难! 能不能保留以前的工作,而在这之上改进呢?经过专家们研究发现,加入退流思想---后向弧,就能再次“直接寻找增大流的路径”。 增广路径(可改进路径)的定义 若P是网络中连结源点s和汇点t的一条路,我们定义路的方向是从s到t,则路上的弧有两种: 前向弧---弧的方向与路的方向一致。前向弧的全体记为P+; 后向弧---弧的方向与路的方向相反。后向弧的全体记为P-; 设F是一个可行流,P 是从s到t的一条路,若P满足下列条件: 在P+的所有前向弧(u,v)上,0≦f(u,v) C(u,v); 在P-的所有后向弧(u,v)上,0f(u,v) ≦C(u,v); 则称P是关于可行流F的一条可增广路径。 图3.3 本图中:S-A-C-B-D-E-T 为一增广路径。其中(C,B)为后向弧,其它为前向弧。 在增广路径上的改进算法: 求路径可改进量; 修改增广路径上的流量; 1.4、附加网络1---残留网络 由于要考虑前向弧、后向弧,分析、描述时不简洁,在图2.1上直观看也不容易看出增广路径。 因此我们把已经有的流量从容量中分离出来表示,引入一个与原问题等价的附加网络1:残留网络。 图4.1 其中,前向弧(黑色)上的容量为“剩余容量”=C(u,v)-f(u,v);后向弧(红色双线)上的容量为“可退流量”=f(v,u)。 改造后的网如下: 图4.2 在这张图上,我们找增广路径显的非常直观了! 结合增广路径,我们有如下定理: 最大流定理 如果残留网络上找不到增广路径,则当前流为最大流;反之,如果当前流不为最大流,则一定有增广路径。 证明涉及最小割概念,具体自己百度。 至此,[问题2.1]和[问题2.2]在这个最大流定理中同时获得解决。 求最大流的基本思想: 基于这种思想的算法,关键之处在于怎样找增广路径。常用方法有: 深度搜索dfs :Ford-Fulkerson 算法,也是入门算法。 宽度搜索bfs 优先搜索pfs---即类似Dijkstra算法的标号法。 1.5.最大流的代码实现 下面我们来学习一下dfs 求最大流的代码实现: 【P1318】ditch 在农夫约翰的农场上,每逢下雨,B

文档评论(0)

118118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档