- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)