算法——最大流:Ford-Fulkerson方法
2014-09-07 18:59
585 查看
最大流是要求解流网络图中从源节点到汇点的最大有效值,首先介绍一些基本概念。
,图中每条边
有一个非负的容量值
,而且,如果边集合
存在边
,则图中不存在反向边
。在流网络图中存在两个特殊节点:源节点
和汇点
;
流的基本性质:
容量限制:对于所有的节点
,要求
;
流量守恒:对于所有节点
,要求
;
Ford-Fulkerson方法是一种迭代的计算过程,实现步骤如下:
初始化图中流的值;
在残存网络中找到增广路径;
沿着增广路径增加流的值,直到残存网络不存在增广路径为止;
和流量
,流网络图
中的一条边可以允许额外流量等于该边容量减去该边上的流量,若差值
为正,则将该边置于残存网络
中。残存网络
可能包含原流网络图
中不存在的边。
即
,其中
残存容量的定义:
残存网络结构图示例:
图a左边为原始流网络图
,右边为残存网络图
,带有箭头的虚线部分表示残存网络的增广路径;
中一条从源节点
和汇点
之间的简单路径,该简单路径的边属于
和不属于
交替出现;增广路径的残存容量表示为:
;
为流网络
中的一个流,该流网络的源节点
和汇点
,则下面条件等价:
为流网络
中的一个最大流;
残存网络不存在增广路径;
例如下图不存在增广路径,则其最大流为
,然后使用
来对流
进行修改。
到汇点
的最短路径,其中每条边的权重为单位距离。
流网络
流网络的概念:是指一个有向图,图中每条边
有一个非负的容量值
,而且,如果边集合
存在边
,则图中不存在反向边
。在流网络图中存在两个特殊节点:源节点
和汇点
;
流的基本性质:
容量限制:对于所有的节点
,要求
;
流量守恒:对于所有节点
,要求
;
Ford-Fulkerson方法
Ford-Fulkerson方法是循环增加流的值,在增加流的值过程中,需要利用残存网络、增广路径和切割。Ford-Fulkerson方法是一种迭代的计算过程,实现步骤如下:
初始化图中流的值;
在残存网络中找到增广路径;
沿着增广路径增加流的值,直到残存网络不存在增广路径为止;
Ford-Fulkerson(G,s,t) initialize flow f to 0 while there exists an augmenting path p in the residual network G(f) augment flow f along p return f
残存网络
给定流网络图和流量
,流网络图
中的一条边可以允许额外流量等于该边容量减去该边上的流量,若差值
为正,则将该边置于残存网络
中。残存网络
可能包含原流网络图
中不存在的边。
即
,其中
残存容量的定义:
残存网络结构图示例:
图a左边为原始流网络图
,右边为残存网络图
,带有箭头的虚线部分表示残存网络的增广路径;
增广路径
是指在残存网络图中一条从源节点
和汇点
之间的简单路径,该简单路径的边属于
和不属于
交替出现;增广路径的残存容量表示为:
;
最大流定理
设为流网络
中的一个流,该流网络的源节点
和汇点
,则下面条件等价:
为流网络
中的一个最大流;
残存网络不存在增广路径;
例如下图不存在增广路径,则其最大流为
基于Ford-Fulkerson方法的算法
在Ford-Fulkerson方法的每次迭代中,寻找某条增广路径,然后使用
来对流
进行修改。
Ford-Fulkerson(G,s,t) for each edge(u,v) ∈G.E (u,v).f = 0 While there exists a path p from s to t in the residual network Gf cf(p) = min{ cf(u,v):(u,v) is in p} for each edge(u,v) in p if (u,v) ∈E (u,v).f = (u,v).f+ cf(p) else (v,u).f = (v,u).f- cf(p)算法中很明显,主要是如何寻找增广路径。不同的寻找方法会导致不同的时间复杂度。第2-3行对每条边进行初始化;第4行开始是在while循环里面找到残存网络的增广路径,直到不存在增广路径为止;
Edmonds-Karp算法
在寻找增广路径时,若使用BFS,也就是说我们在残存网络中选择的增广路径是一条从源节点到汇点
的最短路径,其中每条边的权重为单位距离。
相关文章推荐
- [转] 网络流算法--Ford-Fulkerson方法及其多种实现
- USACO-Section 4.2 The Perfect Stall (二分图最大匹配[匈牙利算法[DFS]||网络流[Ford-Fulkerson]])
- 最大流之Ford-Fulkerson算法
- 《网络流学习笔记02--Edmonds-Karp,Ford-Fulkerson,Dinic三种算法实现最大流》
- 最大流之Ford-Fulkerson方法详解及实现
- Ford-Fulkerson算法模板(最大流)
- Ford-Fulkerson方法求最大流
- [图论]最大流介绍 Ford-Fulkerson算法 邻接表实现
- 网络流算法--Ford-Fulkerson方法及其多种实现
- 网络最大流之一般增广路方法------Ford-Fulkerson
- 最大流算法--Ford-Fulkerson方法及其多种实现
- 网络最大流算法之 Ford_Fulkerson方法,EK算法 c++模板
- 网络流算法--Ford-Fulkerson方法及其多种实现
- hiho一下 第119周 #1398 : 网络流五·最大权闭合子图 【最小割-最大流--Ford-Fulkerson 与 Dinic 算法】
- Ford-Fulkerson算法求最大流Java实现
- 求最大流Ford-Fulkerson方法(Edmonds-Karp算法)
- 最大网络流的Ford-Fulkerson 算法
- 最大流的Ford-Fulkerson方法初步
- 最大流之Ford-Fulkerson方法详解及实现
- C++代码实现Ford-Fulkerson方法Edmonds Karp算法解决最大流问题