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

什么是最大流问题呢

根据我的理解,有一个源点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. CF76A Gift

    题目描述 有一个国家有N个城市和M条道路,这些道路可能连接相同的城市,也有可能两个城市之间有多条道路. 有一天,有一伙强盗占领了这个国家的所有的道路.他们要求国王献给他们礼物,进而根据礼物的多少而放弃 ...

  2. 3A限流IC,带短路保护,PW1503和PW1502

    一般说明 PW1503,PW1502是超低RDS(ON)开关,具有可编程的电流限制,以保护电源源于过电流和短路保护.它具有超温保护以及反向闭锁功能. PW1503,PW1502采用薄型(1毫米)5针薄 ...

  3. JavaScript小记

    JavaScript小记 1. 简介 1. 语言描述 JavaScript 是一门跨平台.面向对象的弱类型动态脚本编程语言 JavaScript 是一门基于原型.函数先行的语言 JavaScript ...

  4. inode占满导致No space left on device inode快速解决方法

    暂未发现其他比我这个更快的方法. 因为其他方法会展示那个非常卡的目录,导致效率极低.而我这个方法不会去展示那个目录. 查找占用的目录 find / -type d -size +1M -maxdept ...

  5. Redis 实战 —— 07. 复制、处理故障、事务及性能优化

    复制简介 P61 关系型数据库通常会使用一个主服务器 (master) 向多个从服务器 (slave) 发送更新,并使用从服务器来处理所有读请求. Redis 也采用了同样的方法实现自己的复制特性,并 ...

  6. 【Source Insight】查找功能 Lookup References 详解

    1.Options Case Sensitive //区分大小写 Whole Words Only //全字匹配查找 Skip Inactive Code //跳过无效代码查找 Skip Commen ...

  7. [每日电路图] 12、带自动烧写能力的 ESP8266 开发板制作

    目录 前言 1.芯片先关信息 2.原理图介绍 2.1 供电电路 2.2 串口电路 2.3 自动烧写电路 3.PCB 效果展示 附录 前言 ESP8266 是乐鑫公司面向物联网应用的高性价比.高度集成的 ...

  8. MVC与三层架构解析学习

    概要 MVC与三层架构不是简单的相等,二者之间存在一些区别. 今天,看到一位博主总结笔记,借鉴而来,以供以后学习. 将javaweb开发中的MVC(SSM框架)与三级架构比较,来解析二者之间的关系. ...

  9. ACCESS手注

    ASP一般搭载ACCESS或者mssql 判断数据库类型 http://www.***.com?id=1 and (select count(*) from sysobjects)>0 http ...

  10. 一条sql查出数据库某张表的所有属性

    select t.TABLE_NAME,--表名 t.COLUMN_NAME,--字段名 t.DATA_TYPE,--字段属性 t.DATA_LENGTH,--类型长度 t.DATA_PRECISIO ...