网络流(理论详解)
2016-07-14 16:58
197 查看
今天抽空看了看网络流最大流问题。了解了下基本概念和求解流程。这里简单总结下。
主要内容来自百度文库某ppt。在每幅图片的下面我会给出一些说明性文字。
![](http://images.cnitblog.com/i/300615/201405/271615457287935.jpg)
![](http://images.cnitblog.com/i/300615/201405/271616266816891.jpg)
本图示最大流的一个实例。由此,可以引出最大流的一些基本的定义和概念
![](http://images.cnitblog.com/i/300615/201405/271618097132616.jpg)
可以这样看,图就是一种管道,管道有最大通过流量的限制,图中边的权值就是所谓的“容量”。同时,注意有唯一的源点和汇点。
![](http://images.cnitblog.com/i/300615/201405/271620246507157.jpg)
这里需要注意容量和流量的区别。其中f(u,v)的范围需要额外注意,是 0<= f(u,v) <= c(u,v),不会出现所谓的负流量。下图是对可行流的图示
![](http://images.cnitblog.com/i/300615/201405/271622294314935.jpg)
有了可行流,我们还需要求最大流
![](http://images.cnitblog.com/i/300615/201405/271624014479324.jpg)
那么如何求最大流呢。可以采用著名的Ford Fulkerson算法
![](http://images.cnitblog.com/i/300615/201405/271626007135522.jpg)
所以说,算法的关键在于
1)何为增广路径,如何找出增广路径。
2)如何更新流量
![](http://images.cnitblog.com/i/300615/201405/271627425098489.jpg)
![](http://images.cnitblog.com/i/300615/201405/271628351815463.jpg)
说的直白些,所谓增广路径,就是找到这样一条路径,其流量不满,未达到容量上限。
所有的可能的增广路径在一起便构成了残留网络。
那么,如何增广呢。
![](http://images.cnitblog.com/i/300615/201405/271632434167694.jpg)
其实,这里的这个描述不太准确。下面我根据我的理解再解释一下。
第一步,计算可增加流量
设某一增广路径上的节点为(a1,a2,a3,a4,....,an)
如果(u,v)是正向边,则增加流量d = min{ c(ai,aj) - f(ai,aj) | j = i +1, i =1,2,3...,n-1}
如果是逆向边,则增加流量d = min{ f(ai, aj) | j = i +1, i =1,2,3...,n-1}
第二步,更新流量
如果(u,v)是正向边,则 f(u,v) = f(u,v) + d
是逆向边,则f(u,v) = f(u,v) - d
注意,如果是逆向边,就是减法,当前管道从中减去部分流量,而且,伴随着这部分减去的流量,必有另一部分管道的流量会增加。。而且,最后的总流量增加了d
结合上述算法,可以详细参阅下下列图示
![](http://images.cnitblog.com/i/300615/201405/271649171817625.jpg)
![](http://images.cnitblog.com/i/300615/201405/271656112913547.jpg)
![](http://images.cnitblog.com/i/300615/201405/271656519316830.jpg)
![](http://images.cnitblog.com/i/300615/201405/271657521817956.jpg)
![](http://images.cnitblog.com/i/300615/201405/271658474635402.jpg)
可以证明,可行流为最大流,当且仅当不存在新的增广路径。
总结一下最大流算法
![](http://images.cnitblog.com/i/300615/201405/271702065567410.jpg)
如何寻找增广路径,采用DFS和BFS的方法。然后在更新流量。
具体实现以后再给出。
源PPT链接http://wenku.baidu.com/view/7ed3c241a8956bec0975e32b.html
今天抽空看了看网络流最大流问题。了解了下基本概念和求解流程。这里简单总结下。
主要内容来自百度文库某ppt。在每幅图片的下面我会给出一些说明性文字。
![](http://images.cnitblog.com/i/300615/201405/271615457287935.jpg)
![](http://images.cnitblog.com/i/300615/201405/271616266816891.jpg)
本图示最大流的一个实例。由此,可以引出最大流的一些基本的定义和概念
![](http://images.cnitblog.com/i/300615/201405/271618097132616.jpg)
可以这样看,图就是一种管道,管道有最大通过流量的限制,图中边的权值就是所谓的“容量”。同时,注意有唯一的源点和汇点。
![](http://images.cnitblog.com/i/300615/201405/271620246507157.jpg)
这里需要注意容量和流量的区别。其中f(u,v)的范围需要额外注意,是 0<= f(u,v) <= c(u,v),不会出现所谓的负流量。下图是对可行流的图示
![](http://images.cnitblog.com/i/300615/201405/271622294314935.jpg)
有了可行流,我们还需要求最大流
![](http://images.cnitblog.com/i/300615/201405/271624014479324.jpg)
那么如何求最大流呢。可以采用著名的Ford Fulkerson算法
![](http://images.cnitblog.com/i/300615/201405/271626007135522.jpg)
所以说,算法的关键在于
1)何为增广路径,如何找出增广路径。
2)如何更新流量
![](http://images.cnitblog.com/i/300615/201405/271627425098489.jpg)
![](http://images.cnitblog.com/i/300615/201405/271628351815463.jpg)
说的直白些,所谓增广路径,就是找到这样一条路径,其流量不满,未达到容量上限。
所有的可能的增广路径在一起便构成了残留网络。
那么,如何增广呢。
![](http://images.cnitblog.com/i/300615/201405/271632434167694.jpg)
其实,这里的这个描述不太准确。下面我根据我的理解再解释一下。
第一步,计算可增加流量
设某一增广路径上的节点为(a1,a2,a3,a4,....,an)
如果(u,v)是正向边,则增加流量d = min{ c(ai,aj) - f(ai,aj) | j = i +1, i =1,2,3...,n-1}
如果是逆向边,则增加流量d = min{ f(ai, aj) | j = i +1, i =1,2,3...,n-1}
第二步,更新流量
如果(u,v)是正向边,则 f(u,v) = f(u,v) + d
是逆向边,则f(u,v) = f(u,v) - d
注意,如果是逆向边,就是减法,当前管道从中减去部分流量,而且,伴随着这部分减去的流量,必有另一部分管道的流量会增加。。而且,最后的总流量增加了d
结合上述算法,可以详细参阅下下列图示
![](http://images.cnitblog.com/i/300615/201405/271649171817625.jpg)
![](http://images.cnitblog.com/i/300615/201405/271656112913547.jpg)
![](http://images.cnitblog.com/i/300615/201405/271656519316830.jpg)
![](http://images.cnitblog.com/i/300615/201405/271657521817956.jpg)
![](http://images.cnitblog.com/i/300615/201405/271658474635402.jpg)
可以证明,可行流为最大流,当且仅当不存在新的增广路径。
总结一下最大流算法
![](http://images.cnitblog.com/i/300615/201405/271702065567410.jpg)
如何寻找增广路径,采用DFS和BFS的方法。然后在更新流量。
具体实现以后再给出。
源PPT链接http://wenku.baidu.com/view/7ed3c241a8956bec0975e32b.html
相关文章推荐
- Poj2638 网络流+最短路+二分答案
- BZOJ3275 Number (最小割)
- [笔记] 网络流-最大流 POJ-1273\HDU-4240
- 上下界网络流初探
- Edmonds-Karp 最大流 hdu 1532 Drained Ditches
- 网络流_poj1273
- POJ 1273 Drainage Ditches 最大流 dinic
- POJ1273-Drainage Ditches
- 【网络流】复杂的大门
- ACM/ICPC World Finals 2013 C Surely You Congest
- 北京集训队 2016 Day4 alarm
- 网络流算法整理
- 网络流最大流之SAP算法 详解
- [BZOJ1797][AHOI2009][最大流][强连通分量]Mincut最小割
- [BZOJ2324][ZJOI2011][最小费用最大流]营救皮卡丘
- [BZOJ1834][ZJOI2010][最大流][最小费用最大流]网络扩容
- Topcoder SRM642 TaroCutting
- POJ2391解题报告
- uva 11248
- 【学习】网络流