一、网络流问题

给出一个有向图G=(u,v),两个不同的节点s与t,其中边上的c为该边上能够通过的最大容量(Capacity);求满足条件的从S到T的最大流(MaxFlow);

用c(e)和f(e)分别表示每条边上的容量(Capacity)与流量(Flow);

1.1 s-t cut

s-t cut :是顶点集合V的一个划分,将其分为两个集合,其中s ∈ A 且 t ∈ B;

cut (A, B)的容量capacity:

Minimum Cut Problem:即找到一个割集,使得cap(A,B)最小;

1.2 Flows

flows的两个性质:

(1)容量限制(Capacity Constraints):即流出的水肯定比水管的容量要小;

对于图G中的每一条边e(capacity),都有

(2)除了s和t,其它节点流入量总是等于流出的量;

对于除了s、t的节点流出和流入的大小一样,即(conservation)

flow的大小为 ,即由顶点s出去的流大小总和;

最大流问题:求s-t流量的最大值;

1.3 Flows and Cuts

1.3.1 Flow value lemma

令f为任意流,(A,B)为任意割集,那么满足f的大小为从A流出的流大小减去流入A的流大小;

如下图:

证明:

1.3.2 最大流=最小割

即对于任意的流f与任意的割集(A,B)来说,都有,即任意流小于割的大小;

证明:

如果v(f) = cap(A, B),那么f即为最大流,而A,B即为最小割;

1.3.2 求最大流的算法

(a)贪心算法

  1. 初始化所有的边flow=0;
  2. 找到一条s-t路径P,使得在该条路径上每条边都有f(e)<c(e)
  3. 沿路径P增加流量
  4. 重复该过程直到stuck

但是局部最优并不等于全局最优,如下图,利用贪心算法得到的结果为20,但是实际的最优值opt=30;

(b)Residual Graph

   ,加上一条反向的边,能够达到撤回的目的

1.如果这两点连线原来就是原图的边,那么它的残存容量等于运载上限-运输流量。即从u到v其大小为17-6=11;
2.如果这两点的反向连线是原图的边,那么它的残存容量等于那条边的运输流量,从v到u其大小为6;
3.其他情况是0,当做没连通。

接下来我们看看残存网络对我们的帮助

1.残存网络中没有从s到t的路径时,最大流等于最小割容量。
2.残存网络中有从s到t的路径时,最大流不等于最小割容量。

(c)Ford-Fulkerson Algorithm

(1)初始化,所有边的flow都初始化为0

(2)寻找增广路径,增广路径中找最小的c(e),记作F。在这种残存网络还有路径从s通向t的情况中,我们没有做到最好,我们要把F纳入我们对于流的更新,直到找不到增广路径为止,更新方法如下:

(a)路径s->2->5->t:最小c(e)=8;  Flow=8;

  ,更新残存网络

(b)路径s->2->3->5->t,最小c(e)=2;  Flow=8+2=10;

更新残存网络:

(c)路径s->3->5->4->t,最小c(e)=6;  Flow=10+6=16;

更新残存网络:

(d)路径s->3->2->4->t,最小c(e)=2; Flow=16+2=18;

(e)路径s->3->5>2->4->t,最小c(e)=1; Flow=18+1=19;

此时,由s-t已经没有增广路径,故算法结束,最大流为19;

伪代码:

1.3.3 Max-Flow Min-Cut Theorem

  • 当没有增广路径的时候,Flow f即为最大流;
  • 最大流=最小割;

证明:

(1->2

假设我们有一个割(A,B)的容量等于f的值,那么利用弱对偶的关系,其他流的值<=(A,B)的容量,而由于1的假设,(A,B)的容量等于f的值,因此得到其他流的值都小于f的值,从而(2)成立;

(2)->(3)

我们来证明它的逆否命题。对于f如果还有还有增广路径,那f不是最大流,这很显然,如果按照FF算法的话,我们还可以增加flow f的值,因此f就不会是最大流,因此逆否命题成立,也就代表(2)->(3)成立

3->(1)

让割(A,B)满足这么一个条件:s在A中,且A中的顶点通过一些无向的边连接而成,这些边要么是不是满的前向边要么是非空的反向边。如下图中加粗的边。

那么根据定义,s在A中,由于没有增广路径,因此t在B中。

由于这个割的B到A的边流量全是0,

这个割的容量 = 沿着这个割的netflow(从A到B边的流量-从B到A边的流量)

又根据flow-value引理,netflow = value of low,因此推出(1).

1.4 时间复杂度的分析

假设所有的容量capacity的值为在1~C之间的整数;并且在整个算法过程中,f(e)和剩余容量cf(e)也都保持整数大小;

1.4.1 选择合适的Augmenting Paths

当为如下情况的时候,FF算法需要迭代C次;

而如果C是无理数,那么会导致该算法无法终止;

目标:能够高效地找到增广路径,并能够更少次数的迭代;

方法:

选择具有最高瓶颈容量的路径可以最大限度地增加流量;

伪代码如下:

参考:

https://blog.csdn.net/a519781181/article/details/51908303

https://ouuan.github.io/post/%E5%9F%BA%E4%BA%8E-capacity-scaling-%E7%9A%84%E5%BC%B1%E5%A4%9A%E9%A1%B9%E5%BC%8F%E5%A4%8D%E6%9D%82%E5%BA%A6%E6%9C%80%E5%B0%8F%E8%B4%B9%E7%94%A8%E6%B5%81%E7%AE%97%E6%B3%95/

具体实现代码:https://blog.csdn.net/nichchen/article/details/84855121?utm_medium=distribute.pc_relevant.none-task-blog-title-10&spm=1001.2101.3001.4242

最大流与最小割Maximum Flow and Minimum Cut相关推荐

  1. 网络流:最大流,最小割 基本概念及算法

    原文:http://www.cnblogs.com/Booble/archive/2011/03/04/1970453.html 参考:http://community.topcoder.com/tc ...

  2. 网络流中最大流和最小割算法

    学习顺序按照下图的改进历程 问题转化:寻找初始解,提升,达到条件停止 求解优化,加回溯边,画残差图,在残差图中寻找一条s可到t的路径 看最大流最小割问题,证明 除 ST外每个点的出度和入度相等,S和T ...

  3. 最大流与最小割(Maxflow与Mincut)

    传统图像主要分割算法: 基于阈值的分割 (1)固定阈值分割 (2)直方图双峰法 (3)迭代阈值图像分割 (4)自适应阈值图像分割 (5)最佳阈值法 2.基于边缘的分割 (1)Canny边缘检测器 (2 ...

  4. 网络流——最大流和最小割

    最小割问题 ststst割:将节点划分为A,BA,BA,B两个集合,其中源节点s∈As\in As∈A且宿节点t∈Bt\in Bt∈B ststst割的容量:由集合AAA到集合BBB所有出边容量之和. ...

  5. 如何快速理解最大流和最小割

    摘要: 割从哪来-------->最大流和最小割之间的等价关系的阐述. 1.问题引入 1.1思考这样一个问题:在给定的图中,如何判断一个源点s到终点t是否有路径存在呢? 我们首先想到的是用BFS ...

  6. 网络流之最大流和最小割

    最大流问题 最大流:给定有向图中每条边的最大流量(容量),求从源点到汇点的最大流量. 容量网络: 括号左边代表容量,右边代表流量. 残留网络:流网络中剩余可增加的流量 增广路:满足容量条件的一条流量不 ...

  7. BZOJ 1001: [BeiJing2006]狼抓兔子【最大流/SPFA+最小割,多解】

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MB Submit: 23822  Solved: 6012 [Submit ...

  8. Forethought Future Cup - Elimination Round G. Zoning Restrictions 最大流(最小割)

    题目链接: https://codeforces.com/contest/1146/problem/G 题意: 你现在要给 nnn 个位置制定高度 hi(1<=hi<=H)h_i (1&l ...

  9. 网络流最大流初步-Push–relabel maximum flow algorithm

    简介 做网络流最大流的题,常用的算法就是Dinic's algorithm.时间复杂度为,通常由于出题人水平较低,几乎能过所有的题.功利地看,这样就没问题了.但是,站在追求真(zhuang)理(B)的 ...

  10. 最大流,最小割刷题记录

    T1 P2057 [SHOI2007] 善意的投票 题目 https://www.luogu.com.cn/blog/OnMyOwn/OnMyOwn https://www.luogu.com.cn/ ...

最新文章

  1. matlab在测量数据处理中的应用,MATLAB在测量数据处理中的应用
  2. Oracle 免费的数据库--Database 快捷版 11g 安装使用与SOD框架对Oracle的CodeFirst支持...
  3. 关于开始申请2010年4月份微软MVP的通知!
  4. oracle全文索引的简单配置
  5. Year-End Review
  6. Android Bitmap(位图)详解
  7. SQL Server 阻塞原因分析
  8. cobbler api接口开发测试实例
  9. 《纽约时报》:乔布斯最后的日子 与家人相伴
  10. YoC RTOS 实战:FOTA系统升级
  11. 怎么改自己手机的ip地址
  12. 蓝桥杯--算法提高 字符串跳步(java)
  13. 软件工程项目:电梯调度
  14. ROS小车三轴全向轮底座运动学分析
  15. ps2017 cc 打印排版一寸照片
  16. HTML5页面跳转的几种方法
  17. Android实现应用的增量更新\升级
  18. 数据分析案例—天猫品牌店铺运营报告
  19. 【Aegisub相关】VSCode插件:Aegisub Helper的安装、功能介绍及使用方法
  20. 计算机大赛响亮口号,登山比赛团队名称和团队口号

热门文章

  1. 我工作第五年的学习与读书之法
  2. 有哪些可以用来制作历史时间轴的软件?
  3. zebradesginer zpl代码,如何从ZebraDesigner标签获取ZPL代码?
  4. 深度linux 官网,深度OS
  5. 全能音乐助手 激活_全能音乐助手
  6. C# OpenCV OpenCVSharp应用实例--LCD屏幕脏污检测
  7. 关系数据库到Hbase数据库的数据迁移
  8. 0.99元用7天,金山云大米云主机给你这个机会!
  9. 永洪BI到底有多好用?知乎大V用3000字力荐
  10. android youtube免谷歌,youtube免谷歌框架