最大流最小割(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
- 最大流最小割(max flow min cut)
- Max Flow / Min Cut 最大流最小割算法学习
- Grab Cut 源码解读(最大流-最小割, min-cut\max-flow)
- 最大流最小割定理(max flow/min cut theory)
- 最大流最小割定理(max flow/min cut theory)
- 最大流最小割定理(max flow/min cut theory)
- CV | Max Flow / Min Cut 最大流最小割算法学习
- 最大流最小割定理(max flow/min cut theory)
- CV | Max Flow / Min Cut 最大流最小割算法学习
- matlab实现图割算法中的最大流最小割Max-flow/min-cut问题(一)
- matlab实现图割算法中的最大流最小割Max-flow/min-cut问题(一)
- Max-Flow Min-Cut
- Max-Flow Min-Cut
- 图割论文阅读笔记:Min-cut/Max-flow
- max flow ans min cut
- hdu6214-最小割边数&最大流最小割-Smallest Minimum Cut
- 图的最小割:Graph-cut:Min-Cut Problem
- HDU6214 Smallest Minimum Cut 【最大流求最小割边】
- Bicycle Race
- Codeforces-149D-Coloring Brackets【区间DP】
- Python初学者的17个技巧
- 关于js原型继承的理解
- KMP算法
- 最大流最小割(max flow min cut)
- 日新进用户200W+,解密《龙之谷》手游背后的压测故事
- MySQL引擎介绍ISAM,MyISAM,HEAP,InnoDB
- Android Hook 步骤
- idea 导出javadoc
- 代写
- char的取值范围深究
- UWP入门(十)--获取文件属性
- 设计模式六大原则(3):依赖倒置原则 (讲的很清楚的,易理解)