算法课 - 最大流问题
课程链接:
算法设计与分析-最大流https://www.icourse163.org/learn/BUAA-1449777166?tid=1465293450#/learn/content?type=detail&id=1244171114
一、流网络
流量/容量都表示在边上,有源点和汇点
几个概念:剩余流量、总流量、流量限制(条件)、流量守恒(条件)
二、最大流问题描述
在满足约束条件的情况下,让总流量最大。
三、最大流算法思想
直观的描述算法(需要改进):
A:找出一条路径,这条路径点不重复,并且找出剩余流量的最小值作为这条路径的流量。
迭代寻找路径,重复步骤A,增加总流量:
直到最后,我们再也找不到可以增加总流量的路径结束。
但是,发现这种策略不一定能找到最大流。
发现我们的直观策略,如果在某个路径上 +1 的话是无法增加总流量的,但是减小某些路径的流量,将流量大小进行再分配之后发现是可以增加总流量的。
于是,我们思考怎么调整直观的策略。。。。
因为缩减边上的流量可以进一步增大总流量,因此引入反向边代表缩减的边流量。
这种反向边的边权如何定义?
为了保证流量调整的合理性, 我们可以由原始边产生一组残存边:
我们定义残存网络(也叫余图)
在残存网络(余图)中寻找增广路径。
最终形成了Ford-Fulkerson算法(FFA)思想
总结:我们算法改进的历程(从直观算法到Ford-Fulkerson算法)
四、示例分析
初始时刻的流网络展示:
将流网络改造成残存网络(也就是他的余图):
需要注意的是,其实每个路径都有正向边和反向边,只不过为0的就省去了
寻找这个残存网络的增广路径:
于是在增加了这条增广路径之后,我们得到了新的流网络:
根据这个新的流网络得到新的残存网络:
找到了新的残存网络之中的增广路径:
得到新的流网络:
基于新的流网络更新残存网络:
发现新的增广路径:
更新流网络:
重复以上的三步循环。。。。
最终当无法发现新的增广路径的时候,算法可以终止。
四、分析FFA
时间复杂度:O(mC)
其中C为最大流的值,m为边数
DFS查找增广路径P ,每次的DFS的时间复杂度就是O(边数)
运行时间依赖于增广过程:
五、如何证明FFA可以获得最优解
FFA的正确性证明
充分性:
必要性:
直接证明比较困难:
证明需要借助中间问题证明
我们引入“割”的概念:将最大流问题转化为最小割问题
给出割的容量的概念:
注意在计算割的容量的时候,我们考虑的是容量而不是流量
下面给出割与流的关系的定理:流值定理
流值:注意是出去和进入的路径的流量的差值
S的流出也就是最大流 =
话说回来:
最小割找的是什么?
瓶颈总容量也就是这个分割流出的容量也就是这个割的容量是最小的,想要让输送的更多,卡脖子的地方就是在这个 割 的地方。
于是又根据流值定理,我们得到最大流的流值小于等于最小割的容量。
回到我们的必要性证明
从而
算法课 - 最大流问题相关推荐
- AcWing提高算法课Level-3 第四章 高级数据结构
AcWing提高算法课Level-3 第四章 高级数据结构 并查集 AcWing 1250. 格子游戏1167人打卡 AcWing 1252. 搭配购买1064人打卡 AcWing 237. 程序自动 ...
- AcWing进阶算法课Level-4 第六章 搜索 (模拟退火,爬山)
AcWing进阶算法课Level-4 第六章 搜索 模拟退火 AcWing 3167. 星星还是树110人打卡 AcWing 2424. 保龄球78人打卡 AcWing 2680. 均分数据72人打卡 ...
- AcWing提高算法课Level-3 第六章 基础算法
AcWing提高算法课Level-3 第六章 基础算法 位运算 AcWing 90. 64位整数乘法761人打卡 递推与递归 AcWing 95. 费解的开关520人打卡 AcWing 97. 约数之 ...
- AcWing基础算法课Level-2 第四讲 数学知识
AcWing基础算法课Level-2 第四讲 数学知识 您将学会以下数学名词 质数,试除法,埃式筛法,线性筛,辗转相除,算术基本定理,质因数分解,欧拉函数,快速幂,费马小定理,逆元,拓展欧几里得,一次 ...
- AcWing基础算法课Level-2 第五讲 动态规划
AcWing基础算法课Level-2 第五讲 动态规划 背包问题 AcWing 2. 01背包问题3018人打卡 AcWing 3. 完全背包问题2749人打卡 AcWing 4. 多重背包问题255 ...
- AcWing基础算法课Level-2 第二讲 数据结构
AcWing基础算法课Level-2 第二讲 数据结构 单链表 AcWing 826. 单链表3453人打卡 双链表 AcWing 827. 双链表2865人打卡 栈 AcWing 828. 模拟栈3 ...
- AcWing基础算法课Level-2 第六讲 贪心
AcWing基础算法课Level-2 第六讲 贪心 区间问题 AcWing 905. 区间选点1751人打卡 AcWing 908. 最大不相交区间数量1613人打卡 AcWing 906. 区间分组 ...
- AcWing基础算法课Level-2 第三讲 搜索与图论
AcWing基础算法课Level-2 第三讲 搜索与图论 DFS AcWing 842. 排列数字3379人打卡 AcWing 843. n-皇后问题3071人打卡 BFS AcWing 844. 走 ...
- 「数据结构」普林斯顿算法课第二周作业
「数据结构」普林斯顿算法课第二周作业 Algorithm I, Princeton 编程作业: Deques and Randomized Queues 思路 Deque.java Randomize ...
- [算法课] 小偷问题
文章目录 算法标签 递归 题目来源 算法课 题目简介 思路 代码 需要注意的问题 算法标签 递归 题目来源 算法课 题目简介 思路 很明白的思路 一个小偷从N个数列当中获取值,但是必须从左往右固定顺序 ...
最新文章
- 算法练习——ACM_1001_Exponentiation
- java佳沃维洛奇,新品速递:JAVA 双雄耀世登场
- 如何使用Java keytool命令行创建一个自签名证书
- 【微服务学习】Polly:熔断降级组件
- 【TypeScript系列教程07】变量声明
- 【灵修】舍得——有舍有得
- iPhone 13拍照马赛克、换屏无法解锁Face ID、iPad mini 6“果冻屏”:等“百香果”吧...
- Atitti 载入类的几种方法 Class.forName ClassLoader.loadClass 直接new
- 传感器技术—湿敏电阻式传感器(学习笔记五)
- Java stream().filter()筛选出符合条件的数据
- office 2019 安装教程(图解版)
- 超微服务器查型号,超微 云服务器
- 爬虫-域名抢注(whois.ai)
- 视频文件太大?使用FFmpeg来无损压缩它
- 线程池原理(ThreadPoolExecutor)
- JAVA如何判断两个字符串是否相等
- python语法技巧
- Cisco上配置单臂路由
- 杭州金田电磁转换器MODBUS通讯协议
- 如何借助3D制图软件来快速实现定制化设计?
热门文章
- IIS 配置详解 请求长度限制调整
- 解决方法-SQLserver建表后更改列,显示不允许保存更改。您所做的更改要求删除并重新创建以下表
- Axure中使用fontawesome字体
- android swf播放器,万能Flash(swf)播放器
- 陈希孺概率与数统:入门级自学佳作
- 常用的API函数汇总
- VOD紧急抱团是利是弊?
- 中国农村统计年鉴合集(1985-2019年)
- vb mysql 5.1 adodb_VB 中 ADO、 ADODB、 ADODC 的区别与联系(皮毛)
- WAP网站制作(WAP网站建设)全攻略教程一