目录

问题描述:

EK算法:

算法描述:

伪代码:

例子:

控制台对应输出为:

关键定理证明:

最大流最小割定理:

1推2:

2推3:

3推1:

时间复杂度分析

分析

关键边定义:

时间复杂度计算:

FF算法:

FF算法介绍

FF算法缺陷分析:


问题描述:

G=(V,E)是一个有向图,其中每条边(u,v)有一个非负的容量值c(u,v),而且如果E中包含一条边(u,v),那么图中就不存在它的反向边。在流网络中有两个特殊的结点,源结点s和汇点t,源结点s只会流出不会流进,汇点只会流进不会流出,我们要求的就是从源结点流到汇结点的路径的值之和的最大值

EK算法:

算法描述:

每次从残留网络中找出一条从源结点到汇结点的最短路径,流选为路径中的残存容量,依据流更新残存网络(将每条边的残存容量改为当前容量减去流的大小,并添加对应的反向边,边的容量为流的大小)

重复选最短路径,更新残存网络,直到没有最短路径为止

此时的流累加和即为最大流

由于每次要找的是最短路径,所以需要用BFS找路径

伪代码

例子:

初始图:

第一次路径1->2->4->6,流大小:12

更新后图为:

第二次路径为1->3->5->6,流大小:4

更新后图为:

第三次路径为1->3->5->4->6,流大小:7

更新后图为:

此时,再也找不到最短路径,算法结束,则最大流为:12+4+7=23

控制台对应输出为:

关键定理证明:

最大流最小割定理:

下面条件等价

1、f是G的一个最大流

2、残存网络不包括任何增广路径

3、|f|=c(S,T),其中(S,T)是流网络的某个切割

1推2:

假定f是G的一个最大流,但残存网络中仍包含有一条增广路径,那么对流f增加流量后,所得的值是严格大于f的值的,这与f是G的一个最大流矛盾

2推3:

假设流网络G不包含任何增广路径,现在定义S为G中存在一条从s到v的路径的所有v的集合,定义T为V-S,则划分(S,T)是流网络G的一个切割。

对S中的任意一个结点u,T中的任意一个结点v

如果(u,v)属于E,则必有f(u,v)=c(u,v)

如果(v,u)属于E,则必有f(v,u)=0

如果(u,v)和(v,u)都不属于E,则f(u,v)= f(v,u)=0

因此

所以|f| = f(S,T)= c(S,T),得证

3推1:

对于所有切割(S,T),|f|≤c(S,T)

因此,当|f| = c(S,T)时,f就是一个最大流

时间复杂度分析

分析

对于一个流网络,我们要分析EK算法的复杂度,实际就是要分析调用bfs的次数,但是bfs的次数是很难分析的,所以需要做一点转换,将对bfs次数的分析转换为其它和它等价的实体量且稍微简单一点的分析

在实际分析中,我们发现关键边的个数和bfs的次数是等价的,所以要分析bfs次数,不妨就分析关键边的个数

关键边定义:

边(u,v)的残存容量为最短路径的残存容量,则称为为关键边

任一增广路径都至少存在一条关键边

时间复杂度计算:

边(u,v)成为关键边到下一次成为关键边,从原结点到u的距离至少增加2个单位

②由于从源结点s到结点u的中间结点不可能包括s、u或t,所以一直到u成为不可到达结点前,距离最长为v-2

由①②可得边(u,v)成为关键边的次数最多为(V-2)/2,取V/2

由于一共有E条边,所以EK算法中关键边总数为O(VE)

总时间 = BFS时间 * BFS次数

由于每次BFS时间为O(E),需要O(VE)次BFS,所以总时间为O(VE²)

FF算法:

FF算法介绍

FF算法和EK算法很相似,唯一不同的地方就是FF算法每次找的不是最短增广路径,它找的路径是随机的

FF算法缺陷分析:

由于FF算法每次找的增广路径不是最短路径,所以FF算法存在这样一个缺陷:它会使一条边成为关建边的最大次数从原来的V/2上升到K/2(K为所有边中权值最大的边的权值)

举下面一个例子

图3、FF算法样例图

按照EK算法,边(u,v)和(v,u)成为关键边的最大次数应该是4/2-1 = 1,所以所需要的bfs次数为1+1 = 2次

图4、FF算法过程图

图5、FF算法过程图

在FF算法中,它将以图4和图5的方式反复流动500000次

边(u,v)和(v,u)成为关键边的最大次数是1000000/2=500000,所以所需要的bfs次数为500000+500000=1000000次,由于调用bfs的效率过低,所以会导致FF算法比EK算法慢

代码:×

最大流问题之FF算法与EK算法相关推荐

  1. 图论 —— 网络流 —— 最大流 —— FF 算法与 EK 算法

    [概述] FF 算法与 EK 算法是求解最大流的一般增广路方法,其时间复杂度均为 O(n*m*m) Ford-Fulkerson 算法是求解最大流的最基础的算法,其核心思想是增广路定理:网络达到最大流 ...

  2. 最大流算法之一——EK算法

    EK算法流程 EK算法的流程很简单: 随意找一个可行流作为流量网络更新的基础(一般题目没有规定可以采用流量为0的可行流) 利用bfsbfsbfs找一条从源点到汇点的可行流路径 用新找到的可行流路径更新 ...

  3. Edmonds-Karp算法(EK算法)简单讲解及实现(邻接表)

    目录 最大流问题介绍 图定义 源点与汇点 最大流问题描述 Ford-Fulkerson方法 回退边与增广图 伪代码 图解 Edmonds-Karp算法 复杂度 代码实现细节 代码 最大流问题介绍 图定 ...

  4. 网络流问题以及EK算法复杂度分析

    网络流问题以及EK算法复杂度分析 一.网络流算法 通过一个例子引入网络流问题. 现有一个自来水厂要往家里通水,自来水厂用Vs表示,家用Vt表示.从自来水厂到家之间连接了很多水管,并且中途经过很多转接点 ...

  5. HDU 3549 Flow Problem(最大流模版EK算法)

    题目链接 第一道最大流,赤裸裸的模版题,刚好可以熟悉模版用.今天看了一下最大流,就看了一个EK算法,感觉有点和二分图匹配算法有点相似,对于最大流问题有点了解了,不过为什么这么做,也不是 很懂,只是把代 ...

  6. 网络流——最大流EK算法讲解

    网络流--最大流EK算法讲解 好了,这是第二篇博客了,如第一篇所述,来讲一讲刚刚理解的网络流.因为本人只会EK算法,所以先讲这个算法.(我会去补知识点的!!!) 什么是网络流??? 读者们刚接触这个知 ...

  7. 网络流最大流----EK算法

    先来介绍一些基本概念: 网络是指一个有向图G=(V,E),有两个特殊节点:源点S和汇点T.每条有向边(x,y)都有一个权值c(x,y),称为边的容量.如果(x,y)不在图中,那么就有c(x,y)=0. ...

  8. (通俗易懂小白入门)网络流最大流——EK算法

    网络流 网络流是模仿水流解决生活中类似问题的一种方法策略,来看这么一个问题,有一个自来水厂S,它要向目标T提供水量,从S出发有不确定数量和方向的水管,它可能直接到达T或者经过更多的节点的中转,目前确定 ...

  9. 网络流之最大流算法——EK算法(通俗讲解)

    先放道模板题来说明网络流: Power Network A power network consists of nodes (power stations, consumers and dispatc ...

  10. 【网络流】EK算法及其优化

    今天上午我仿佛知道了什么叫做网络流,这里推荐一篇博客,大家入门网络流的可以看一下这篇博客,保证一看就懂! 博客链接: 网络流入门 这里有一篇经过我改过的EK带注释代码(博客里也有一样的,只是加了一些注 ...

最新文章

  1. python属性使用教程_Python对象的属性访问过程详解
  2. 算命数据_未来的数据科学家或算命精神向导
  3. Python机器学习:决策树002信息熵
  4. screenX,clientX,pageX,offsetX,的区别
  5. Quartz的时间配置
  6. 微信公众平台开发(112) 微信卡券
  7. Scrapy 1.4 文档 02 安装指南
  8. double IE之H3CIE之路--我的H3CIE考试经历
  9. 利用tcp协议实现大文件传输(socket)
  10. 水晶报表中几种交叉表的实现方法 (作者阿泰)
  11. 面试官:如何设计群聊消息的已读未读功能?
  12. 消息队列及短信发送平台
  13. 关于微信小程序自定义交易组件升级处理的相关问题,及解决思路
  14. BOM:04-BOM有哪些形式?(按用途划分)
  15. 感想篇:7)知其然与知其所以然,KnowHow与KnowWhy
  16. java 表格_Java创建表格实例详解
  17. 使用idea快速生成项目树结构
  18. PHP5.4发布:新特性与改动
  19. 引用SMTH的一个“坑”!
  20. linux 后台运行程序命令

热门文章

  1. 面试题汇总-分布式(一)
  2. win10主机前置耳机孔无声音,但是后置有声音,按照下面的设置进行设计即可
  3. 【Matlab】建立最优控制LQR控制器模型
  4. php输出100以内素数(质数)
  5. 怎样进行文献调研?——与青年朋友谈科研(7)
  6. php7和PHP5对比的新特性和性能优化
  7. 简单理解t检验与秩和检验
  8. qss之QRadioButton
  9. 巧用代理猎手揪出局域网中的二级代理
  10. Delphi源码网站