首先我们先解决最大流问题

什么是最大流问题呢

根据我的理解,有一个源点s,汇点t,s可以通过一个网络(雾)流向汇点t

但是每一条边都有他的最大传输容量限制,那么我们的任务是,如何分配流量使得。。从s流向t的流量最大化

并且由于流量并不存在损失,所以非常重要的一点是收到的流量与发出的流量都相等,对于除了s,t的任何点来说都要成立,否则我们认为这不科学

首先该网络图是一个有向图,图中的每条边e,都有对应最大可能的数据传输量c(e),这样就可以把问题转为如下形式

记每条边对应的实际数据传输量为f(e)

传输量应满足如下性质,0<=f(e)<=c(e)

对于任意v属于V\{s,t},他们所有点的收到的数据量和发送的数据量相等

为什么这个是正确的呢,因为如果记出去流量为cf,收到流量为sf,对于除了s,t的每一个点,cfi=sfi,那么最终的和式一定是,cfi+...+cfn=sfi+...+sfn

每次两边都加上相等的两个值。。或者说一堆等式相加,,最后一定还是一个等式

目标是最大化从s发出的流量

首先考虑这样一个贪心算法

找到一条s到t的只经过f(e)<c(e)的边的路径

如果不存在满足条件的路径,则结束算法。否则,沿着路径尽可能地增加合法的符合约束的流量f(e),返回第一步

但是我们知道这样是具有后效性的。。也就是说如果你找了不是最优的路径,那么你不能反悔

由于是邻接表。。这里可以认为你找到的路径是跟输入同样随机的。。。你怎么能确定你的流量分配路径最优呢

如何解决这个问题呢。。

只利用满足f(e)<c(e)的e或者满足f(e)>0的e对应的反向边rev(e),寻找一条s到t的路径

如果不存在满足条件的路径则结束。否则沿着该路径尽可能地增加流,返回第一步。

我们称f(e)<c(e)的e和满足f(e)>0的e对应的反向边rev(e)所组成的图为残余网络,并称残余网络上s-t的路径为增广路

实现方面。。我们可以不记录每条边流过的流量的状态,取而代之的是我们可以直接改变其边的容量c(e)

记最大流的流量为F,那么Ford-Fulkerson算法至多进行F次dfs,所以其复杂度为O(F|E|)不过这是一个很松的上界

达到这种复杂度的情况基本不存在。。实际应用还是挺好的。。

那么我们如何证明上面的做法是正确的呢

为了证明FF算法所求得的确实是最大流,我们首先介绍割这一概念,所谓图的割,指的是对于某个顶点集合S属于V

从S出发指向S外部的那些边的集合,记为割(S,V\S),这些边的容量之和被称为割的容量。如果有s属于S,而t属于V\s

(我们在前面已经说过了s是源点,t是汇点)

那么此时的割又称为s-t割。

如果将网络中s-t割中所包含的边都删去,也就不再有s到t的路径了,因此可以考虑一下如下问题。

对于给定网络,为了保证没有从s到t的路径,需要删去的边的总容量的最小值是多少?

该问题又被称为最小割问题。事实上,这个问题与之前最大流的问题有着很深的联系

首先,让我们来考虑一下任意的s-t流f(s-t的一条流量路径),和任意的s-t割(S,V\S),而这个则是一个边集,前面则是一个路径集合

因为有f(路径流量集合)的流量=(s的出边的总流量)

而对v属于S\{s}又有(v的出边的总流量)=(v的入边的总流量),为什么不除去t呢。。因为t属于V\S

所以有(f的流量)=s的出边的流量+v的出边的总流量-(s的入边的流量(这一项其实等于0)+v的入边的总容量)

所以我们合并一下就能发现(f的流量)=S的出边总流量-S的入边总流量

由于存在V\S->S的入边。。所以实际上f的流量=割的容量-前面说的V\S->S入边的流量,

由于我们考虑的流量都是大于零的,所以此时可以推出结论f的流量<=割的容量

接下来,考虑通过FF算法所求得的流f'。记流f'对应的残余网络中从s可达的顶点v组成的集合为S(注意这里的定义更换)

因为f'对应的残余网络不存在s-t的路径,因此(S,V\S)就是一个割,(深度较深的点V\S刚好可能没有连边,然而这也是合法的)

此外根据S的定义,对包含在割中的边e应该有f'(e)=c(e)这一点我们可以通过S的定义来进行反证

而对V\S到S的边e应该有f'(e)=0,这个怎么证明呢。。如果这个f'(e)!=0,则说明它的反向边的容量S->V\S的容量不是满的。。

如果不是满的我就应该把那个点加入到S集合中来,这与S的定义相矛盾。。

因此f'的流量=(S的出边的流量(割的流量))-(S的入边的总流量(前面证明了这个部分的流量一定是0))=割的容量

再由之前的之前的不等式可知(任意f的流量<=割的容量),现在等于割的容量。。就证明了这个流f'就是最大的流了

于是我们证明了FF算法的正确性,同时还推导出了最大流等于最小割这一重要性质,该性质又被称为最大流最小割定理

根据该定理我们可以直接利用求解最大流问题的算法来求解最小割问题了。

由FF算法的正确性可以知道,如果所有边的容量都是整数,那么最大流和最小割也是整数

网络流学习-Ford-Fulkerson的更多相关文章

  1. ACM/ICPC 之 网络流入门-Ford Fulkerson与SAP算法(POJ1149-POJ1273)

    第一题:按顾客访问猪圈的顺序依次构图(顾客为结点),汇点->第一个顾客->第二个顾客->...->汇点 //第一道网络流 //Ford-Fulkerson //Time:47M ...

  2. 网络流学习(转载自ssw 的博客)

    众所周知,网络流是探究网络上运输的一种图论分支.但是大多数人在第一次接触这个题时都有些畏惧感(比如说我),大佬可以自信跳过.. 本文包括: 1.网络流的概念及基本性质 2.略谈 Edmonds-Kar ...

  3. 【2018.2.8-】网络流学习笔记(含ISAP!)

    网络流的基础内容就不详细发了,网上到处都是,可自学. 总版点这里 ps:以下有些链接是hihocoder的题目(题面有详细讲解),请确保先登录hihocoder,再点击进入相应题目网页. 最大流 基础 ...

  4. 网络流学习 - dinic

    推荐博客:https://www.cnblogs.com/SYCstudio/p/7260613.html#4246029

  5. NOIp 图论算法专题总结 (3):网络流 & 二分图 简明讲义

    系列索引: NOIp 图论算法专题总结 (1) NOIp 图论算法专题总结 (2) NOIp 图论算法专题总结 (3) 网络流 概念 1 容量网络(capacity network)是一个有向图,图的 ...

  6. Python小白的数学建模课-19.网络流优化问题

    流在生活中十分常见,例如交通系统中的人流.车流.物流,供水管网中的水流,金融系统中的现金流,网络中的信息流.网络流优化问题是基本的网络优化问题,应用非常广泛. 网络流优化问题最重要的指标是边的成本和容 ...

  7. POJ1459 Power Network 网络流 最大流

    原文链接http://www.cnblogs.com/zhouzhendong/p/8326021.html 题目传送门 - POJ1459 题意概括 多组数据. 对于每一组数据,首先一个数n,表示有 ...

  8. 【上下界网络流】bzoj2502: 清理雪道

    模型:无源汇有上下界可行流 LJN:模板题吧 Description        滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的 ...

  9. 最小割&网络流应用

    重要链接 基础部分链接 : 二分图 & 网络流初步 zzz大佬博客链接 : 网络流学习笔记 重点内容:最小割二元关系新解(lyd's ppt) 题目:网络流相关题目 lyd神犇课件链接 : 网 ...

随机推荐

  1. TSP旅行商问题

    求解的问题,burma.tsp里面的内容 1 16.47 96.10 2 16.47 94.44 3 20.09 92.54 4 22.39 93.37 5 25.23 97.24 6 22.00 9 ...

  2. 制作 Ubuntu 16.04 离线apt源

    1.下载离线安装包 ubuntu下安装包都会下载到/var/cache/apt/archives下,首先清空该目录 sudo apt-get clean 下载需要安装包 sudo apt-get in ...

  3. jQuery 多选与清除

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 从零开始学Java (五)条件选择

    if switch while do while for break continue 这块对于有语言基础的人来说可以跳过了. 注意有个equals方法. 1 public class Main { ...

  5. Vue中双向数据绑定是如何实现的?

    vue 双向数据绑定是通过 数据劫持 结合 发布订阅模式的方式来实现的, 也就是说数据和视图同步,数据发生变化,视图跟着变化,视图变化,数据也随之发生改变:核心:关于VUE双向数据绑定,其核心是 Ob ...

  6. Webpack4.0各个击破(1)html篇

    webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高.本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建中遇到的具体需求为出发点,学习we ...

  7. LOJ10015扩散

    10015. 「一本通 1.2 练习 2」扩散   题目描述 一个点每过一个单位时间就会向 4 个方向扩散一个距离,如图所示:两个点 a .b 连通,记作e(a,b) ,当且仅当 a.b 的扩散区域有 ...

  8. slowhttptest慢速攻击工具使用详解

    参考文章 浅谈"慢速HTTP攻击Slow HTTP Attack" HTTP慢速攻击 Slowhttptest攻击原理 InstallationAndUsage tag: #slo ...

  9. Java基础图解,JVM,线程,Spring,TCP,SpringMVC等开发体系图解

    Java基础图解,JVM,线程,Spring,TCP,SpringMVC等开发体系图解 1.Java虚拟机运行时数据区图 2. 堆的默认分配图 3.方法区结构图 4.对象的内存布局图 5.对象头的Ma ...

  10. (十八)整合Nacos组件,环境搭建和入门案例详解

    整合Nacos组件,环境搭建和入门案例详解 1.Nacos基础简介 1.1 关键特性 1.2 专业术语解释 1.3 Nacos生态圈 2.SpringBoot整合Nacos 2.1 新建配置 2.2 ...