网络流网络流.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一些定义 如果满足下面的两个条件,称(u,v)为可行弧: r(u,v)0 h(u) = h(v)+1 可行边集Ef,h:所有由可行弧组成的集合。 可行网络Gf,h = (V,Ef,h) 结论9,10 结论9:可行网络中无环.(和结论8的证明类似,弄一堆式子然后叠加一下,导出矛盾) 结论10:推进操作永远不会新增可行弧,却可能使原有的可行弧消失.(根据可行弧的定义显然) 结论11 在u被重标号之后: 1).至少有一条可行弧离开u. 显然.设v0是u的邻居中h值最小的那一个,则(u,v0)必定是一条可行弧. 2).不可能有可行弧进入u. 假设有一条(w,u).则h(w) = h’(u) + 1.根据辅助定理6,relabel操作至少将结点的h+1,所以h(w) h(u) + 1.根据高度函数必须满足的条件,(w,u)在relabel前不在Ef中.而relabel操作只改变可行网络不改变残量网络,(w,u)不可能在relabel前存在于Ef而之后就不存在. 当前弧 每个结点有一个邻居列表和有一个“当前弧”的指针,保存当前检查到邻居列表中的哪一条弧了。初始化时,“当前弧”指向与该结点相连的第一条边.邻居列表保存的是所有可能成为可行弧的弧. 当再次调用检查操作时,可以从上一次检查了一半的地方继续检查. 具体请看下面检查操作的伪代码: 检查操作 Check(u) While e(u)0 do If current(u)degree(u) then //当没有可行弧可以推进,该结点却仍旧有赢余时,重标号. Relabel(u) Current(u) = 1 Else If (u,current(u)) 是一条可行弧 then Push(u,current(u)) //push了之后就不能增加 current(u)的值.因为这如果是一次非饱和推进,那再下一次检查时还是可以沿着这条弧做推进. Else Inc(current(u)) 当前弧的正确性 Current是全局变量,当某次Check操作结束时他的值并没有被清空. 比如结点u有10个邻居,上次检查到第7个,那再一次Check(u)的时候就只要从第7个开始检查就可以了。 为什么再一次检查的时候不要检查第1-6条边了?能否证明在再一次检查的时候他们一定不是可行弧? 当前弧的正确性 在relabel-to-front算法中,relabel只被Check调用. 当“当前弧”移动时,移动前它指向的那条弧一定是不可行的.而推进操作不能创造可行弧.只有relabel可以.两次Check之间没有relabel操作.所以原先的不可行的弧在第二次Check之前一直是不可行的. Relabel-to-front Init-Preflow 初始化结点(除s,t)列表L(任何顺序均可) 令所有u,Current(u) = 1 u ? Head[L] While u nil do Old-height ? h(u) Check(u) If h(u) old-height then 将u移到L首部 //如果h(u)比原先的h高了,说明被relabel,移到队首. u ? next(u) 增广路算法的正确性 如果 最大流最小割定理不能从2推出3,那么存在这样一种可能性: 尽管找不到增广路径了,但由于前面的错误决策,导致f还没有到达最大流,却不能通过修改当前流来得到最大流. 但由于最大流最小割定理的三个条件互相等价(1-2,2-3,3-1), 一个流是最大流当且仅当它没有增广路径. 增广路算法的效率 设n = |V|, m = |E| 每次增广都是一次BFS,效率为O(m) 所以,总共的时间复杂度为O(m*f*) 其中f*为增广次数. 怎么求f*? f* 对于随机数据,f*的值与n比较接近.当m不太大也不太小时,f*的值较大. (我出随机数据的方法是:固定地为源点和汇点连上一些边,然后随机生成中间的边.中间的边保证边的两个端点的编号相差不太大.这与不少题目转成网络流后形成的图相似) f*的理论上界 考虑每一次增广,至少有一条边的r(u,v)值等于增广路径的流量.称这些边为临界边.增广之后,这条临界边就在残量网络中消失. 假设一条临界边对应一次增广(事实上很难达到这样),令每条边成为临界边的次数为k(u,v),则有f* = O(m*k). k的上界? k的上界 如果要让一条曾经的临界边(u,v)再次成为临界边,则必须有一条增广路径包含边(v,u).因为每次增广之后临界边就消失,要让他再次成为临界边至少要让他再次在残量网络中出现,即(v,u)要被增广. 结合上面的结论可以证明,当算法取的增广路总是残量网络中的最短路,任意一条边成为临界边的次数至多为n/2-1.

文档评论(0)

雨中人 + 关注
实名认证
文档贡献者

这一世渡尽红尘,若有来生,不再为人。

1亿VIP精品文档

相关文档