最大流最小割(max flow min cut)

来源:互联网 发布:工作软件开发经历 编辑:程序博客网 时间:2024/04/29 21:20

1.案例:

在1950’s的冷战中,最优的方式来破坏苏联到东德的铁路网?



2.背景:

有向加权图称之为网络,每一条边有方向和权重,我们在此认为图中存在一个源点和一个汇点,如图,顶点9为源点,顶点6为汇点。


割(CUT):

割是网络中顶点的分割,将集合分割成为两个部分S和T,在一个流网络中,源点s包含于集合S中,汇点t包含于集合T中。

割集:

割的集合为起点在S中,终点在T中的边的集合。

割的容量:

为割集中边的权重和。

如图:我们取s点属于S,其余的点则属于T,那么割集为{<s,2>,<s,3>,<s,4>},割的容量为10+5+15=30


当我们进行如下切割后,S={s,2,3,4},T={5,6,7,t},那么割集为边的集合{<2,5>,<2,6,>,<3,6>,<4,7>},割集的容量为9+15+8+30=62

(注意并不包含起点在T中,终点在S中的边的权重)。


流(FLOW):

一个网络中的流是一个函数 f:E->R,给网络中的每一条边赋值,所赋值应该小于该边的容量,并且是非负的。

对于每一个中间节点,输出流和输入流必须是相等的,flow的值等于离开源点的流量值之和,也等于汇入汇点的流量之和。



最大流最小割原理:

对于任意网络,最大流的值等于最小割的容量。

Ford-Fulkerson算法:

残留网络:

指给定一个网络和一个流,其对应还可以容纳的流组成的网络。假定一个网络G=(V,E),其源点是s,汇点为t,

设f为G中的一个流,对应顶点u到顶点v的流,在不超过C(u,v)(C代表容量)的条件下,从u到v之间可以压入的

额外网络流量,即边的残余容量(residual capacity),其计算公式为:


下图中f(2,5)=6,那么其残余网络边为r(2,5)=c(2,5)-f(2,5)=9-6=3, r(5,2)=c(5,2)-f(5,2)=0-(-f(2,5))=6,同样可以得到其他边。 



对于上图,我们可以得到其残余网络为:


增广路径:

已知一个流网络G和流f,增广路经p是其残留网络中从s到t的一条简单路径,形象的理解为从s到t存在一条不违反边容量的路径,

向这条路径中压入流量,可以增加整个网络的流值,下图中,存在一条从s到t的路径,我们可以压入该路径上最小单位的流量,

即2个单位的流量,在该路径上我们进行流量值的更新。


 

调整后的图为(注意到只能更新当前路径上的流量值,其他路径流量不能更新),从而在该路径上,不能从s到达t。

 

同样的,继续查找可以从s到达t的路径,继续进行流量的调整,


 

直到找完所有路径,



我们便找到了最大流最小分割,在上图中为该网络中的最大流量(即最小割)为28.


Ford-Fulkerson寻找最大流的算法描述:

1. 建立残余网络

2. 从残余网络中找到一条从源点到汇点的路径,确保路径上的流严格大于0.

3. 如果存在这样的路径,更新路径上的流量(最小流量更新为0),其他进行相应的改变.

4. 否则,已经是最大流

5. (s,t)-割,S中所有的顶点都从源点可达,T集合为V-S.


证明:当无法寻找到增广路径时,当前网络为最大流。

网络中的流量从源点流出的流量经过所有的中间节点后,都全部进入汇点,在残余网络中,我们改变流量,使得最终没有从

s点到t点的路径。在原网络中,对于顶点u属于S,v属于T,有f(u,v)=c(u,v).否则<u,v>存在残余流量,因而s到u加上u到v就构

成了一条s到v的通路,即有一条s到t的通路,这与无法找到增广路径矛盾。因此这表明当前流量f等于当前割的容量的,由于最

大流量等于最小割容量,因而当前流量为最大流量。


原文链接:http://web.williams.edu/Mathematics/sjmiller/public_html/hudson/Eusden_maxflowmincut.pdf

参考文章:http://blog.csdn.net/smartxxyx/article/details/9293665


0 0