网站大量收购闲置独家精品文档,联系QQ:2885784924

计算机算法基础 第2版 习题及答案 第11章 .docx

计算机算法基础 第2版 习题及答案 第11章 .docx

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

PAGE1

第11章 网络流

在例11.7的网络中,如果集合S={s,v3,v4},T={v1,v2,t},那么割(S,T)的容量是多少?

解: 割(S,T)的容量是c(S,T)=13+12+9+19+7=60,参照下图。

sv

s

v1

v2

v3

v4

5

4

12

18

13

7

6

10

9

t

19

假设f是网络G(V,E)的一个流。证明,在剩余网络Gf(V,Ef)中,任一对顶点u和v之间有如下关系:cf(u,v)+cf(v,u)=c(u,v)+c(v,u)。

证明: 因为cf(u,v)=c(u,v)-?(u,v)和cf(v,u)=c(v,u)–?(v,u),我们有cf(u,v)+cf(v,u)=c(u,v)+c(v,u)–[?(u,v)+?(v,u)]。因为[?(u,v)+?(v,u)]=0,从而有cf(u,v)+cf(v,u)=c(u,v)+c(v,u)。?

证明任一个网络G(V,E)的最大流总可以由最多m个增广路径增广而得。(等价地证明,其最大流可以分解为最多m个增广流之和。)

证明: 假设f是G(V,E)的最大流,其值为|f|=F。我们先复制一个网络G(V,E)的考贝,G’(V’,E’)=G(V,E)。其中,V’=V,E’=E,c’(u’,v’)=c(u,v)。因为网络G’和G完全一样,网络G的最大流也必定是G’的最大流,反之也成立。现在,我们利用G(V,E)的最大流f来找G’(V’,E’)的最大流。设G’(V’,E’)的初始流是零。我们证明,最多m次增广路径的增广可得到G’(V’,E’)的最大流。

在G(V,E)中一条从源点s到汇点t的路径p称为一条流路径(flowpath),如果路径p经过的每条边都有非零的流。我们定义这条流路径的流量为fp=min{f(u,v)|(u,v)?p},也就是路径p上有最小流量的边上的流。我们从G(V,E)的最大流f来找G’(V’,E’)的最大流的算法如下。

Max-flow(G’(V’,E’))

foreachedge(u’,v’)?E’

f’(u’,v’)?0 //初始流为零

endfor

foreachedge(u,v)?E

F(u,v)?f(u,v) //F(u,v)记下f的初值,算法会更改变f,但不改F

endfor

whilethereexistsaflowpathpinG(V,E) //如果存在一条s到t的流路径p(可用BFS找)

??f(p) //f(p)是p的流量,f(p)=min{f(u,v)|(u,v)?p}

foreachedge(u,v)?p

f’(u’,v’)?f’(u’,v’)+? //增加G’中边(u’,v’)上流量

f(u,v)?f(u,v)-? //减少G中边(u,v)上流量

endfor

endwhile

End

上面算法的正确性可以证明如下。

首先,我们证明,一条G中的流路径就是G’中的增广路径。因为G’中的任何一条边(u’,v’)上流量的增加就等于G中边(u,v)上流量的减少,两者之和f’(u’,v’)+f(u,v)始终不变,f’(u’,v’)+f(u,v)=0+F(u,v)?c(u,v)=c’(u’,v’),所以,在每次第7行while循环之后,G’中边(u’,v’)上的剩余容量c’f(u’,v’)满足以下不等式:

c’f(u’,v’)=c(u,v)-f’(u’,v’)?F(u,v)-f’(u’,v’)=f(u,v)。

因此,只要f(u,v)0,就有c’f(u’,v’)0。所以,一条G中的流路径就是G’中的增广路径。

其次,容易看出,每一次G中的流减少以后仍然是一个正常流。这是因为它满足f(u,v)?c(u,v)和流量守恒。

现在需要证明的是,只要G中的流不是零,就一定有流路径。我们用反证法。如果不是,那么,我们把所有从源点s有流路径可达的点放在集合S中,其它点放在集合T中。因为t?T,(S,T)必定是个割,并且有f(S,T)=0从而|f|=0。这与G中的流不是零相矛盾。所以,上面的算法Max-flow正确地产生G’(V’,E’)的最大流。

因为每次增广后,G中至少有一条边

文档评论(0)

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

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

1亿VIP精品文档

相关文档