当前课程知识点:算法设计与分析 > 7 Network Flow > 7.3 Ford-Fulkerson Algorithm > Ford-Fulkerson Algorithm
对于最大流问题
我们首先考虑贪婪算法
开始的时候
令每条边上的流量都为零
寻找一条s-t有向路P
其上的每条边上的流量都小于它的容量
然后沿着路P进行流的增广
一直进行下去
直到找不到这样的路
比如下例中
我们令每条边上的流量都为零
找到一条s-t有向路s-1-2-t
满足要求
这条路上边的最小容量为20
可以增广20个单位的流
当前流值为20
然后我们找不到一条
可以进行增广的有向路
算法终止
对这个问题而言
最优解如右图所示
最大流值为30
所以贪婪算法不能够保证求得最优解
为了方便我们之后的讨论
我们需要引进残量网络的概念
在原网络中
边e=(u, v)
被赋予流值f(e)
边上的容量是c(e)
在残量网络中
它对应了两条边
一条是e=(u, v)
另一条是它的反向边e^R=(v, u)
其上的容量c_f(e)分别为
如果e属于原网络
则为c(e)-f(e)
如果e^R属于原网络
则其上容量为f(e)
比如(u, v)边的容量是17 流量是6
那么在残量网络中(u, v)边上的容量为11
(v, u)边的容量为6
可以看出 残量网络中边上的容量
表示沿着相应方向可以通过的流量
残量网络G_f=(V, E_f)
其中的边为按着上面的定义
容量为正的边的集合
也就是说原网络中流量小于容量的边
加上流量为正的边所对应的反向边
在残量网络上执行贪婪算法
即为Ford-Fulkerson算法
我们通过一个例子
来演示Ford-Fulkerson算法
网络如图
边上标示的数字表示边的容量
初始时 令边上的流量为零
然后寻找一条增广路
找到s-2-5-t这条路
可增广的流量为8
进行增广
构建相应的残量网络
发现下一条增广路s-2-3-5-t
可增广的流量为2
进行增广
再构建相应的残量网络
依次进行
直到残量网络中不存在增广路
算法终止
得到了最大流
最大流值为19
下面给出Ford-Fulkerson算法的伪代码
我们先给出增广路算法
对于一条增广路P
令b为瓶颈容量
也就是说增广路上
所有边上容量的最小值
然后对于前向边
令其上的流量增加b
对于反向边
其上的流量减少b
最后返回流f
下面给出Ford-Fulkerson算法
首先 令所有边上的流量为零
如果残量网络中存在着增广路
那么就调用增广路算法
对流进行增广
最后返回流f
我们来证明Ford-Fulkerson算法的正确性
我们有增广路定理
流f是最大流
当且仅当没有增广路
Ford-Fulkerson算法终止的时候没有增广路
因此得到了最大流
保证了算法的正确性
我们同时证明最大流最小割定理
最大流的流值等于最小割的容量
我们通过证明下面三个条件的等价性
同时证明这两个定理
1. 存在着一个割(A, B)
使得f的流值等于割(A, B)的容量
2. f是一个最大流
3. 对于f网络中不存在增广路
由1到2
这就是弱对偶定理的推论
对于从2到3
我们证明它的逆否命题
令f是一个流
如果存在着一个增广路
那么我们可以沿着增广路进行增广
而提高流值
则f不是最大流
从3到1
令f是一个流
对应残量网络中不存在增广路
令A是残量网络中由s可达的节点集合
其余节点构成B
形成一个(A,B)割
由A的定义
s属于A
t不属于A
我们记得
流f的流值等于A流出的量
减去流入A的量
由A的定义
从A出发的边上流量都等于其容量
向A流入的量都等于0
上式等于A发出的边上的容量
等于(A,B)割的容量
于是命题得证
下面讨论算法的运行时间
假设所有的容量都是整数
介于1和C之间
在增广的过程中每条边的流值
及残量网络中每条边的容量都是整数
我们有下面的定理
因为每条边的容量都是整数
我们构造一个s-t割(A,B)
使得A中只包含s
那么这个割的容量不超过nC
因此最大流值不超过nC
每次增广至少增加一个单位的流
因此至多进行nC次循环
有一个简单的推论
如果C=1的话
那么Ford-Fulkerson算法有n次循环
每次循环可以在O(m)的时间
构建残量网络以及找到一条增广路
则算法的运行时间是O(mn)
我们还有下面的整流定理
如果所有的容量是整数
那么一定存在一个流值为整数的最大流
因为Ford-Fulkerson算法有限步终止
它得到一个整流
因此命题得证
-1.1 Introduction
-1.2 A First Problem: Stable Matching
--A First Problem: Stable Matching
-1.3 Gale-Shapley Algorithm
-1.4 Understanding Gale-Shapley Algorithm
--Understanding Gale-Shapley Algorithm
-Homework1
-Lecture note 1
--Lecture note 1 Introduction of Algorithm
-2.1 Computational Tractability
-2.2 Asymptotic Order of Growth
-2.3 A Survey of Common Running Times
--A Survey of Common Running Times
-Homework2
-Lecture note 2
--Lecture note 2 Basics of Algorithm Analysis
-3.1 Basic Definitions and Applications
--Basic Definitions and Applications
-3.2 Graph Traversal
-3.3 Testing Bipartiteness
-3.4 Connectivity in Directed Graphs
--Connectivity in Directed Graphs
-3.5 DAG and Topological Ordering
--DAG and Topological Ordering
-Homework3
-Lecture note 3
-4.1 Coin Changing
-4.2 Interval Scheduling
-4.3 Interval Partitioning
-4.4 Scheduling to Minimize Lateness
--Scheduling to Minimize Lateness
-4.5 Optimal Caching
-4.6 Shortest Paths in a Graph
-4.7 Minimum Spanning Tree
-4.8 Correctness of Algorithms
-4.9 Clustering
-Homework4
-Lecture note 4
--Lecture note 4 Greedy Algorithms
-5.1 Mergesort
-5.2 Counting Inversions
-5.3 Closest Pair of Points
-5.4 Integer Multiplication
-5.5 Matrix Multiplication
--Video
-5.6 Convolution and FFT
-5.7 FFT
--FFT
-5.8 Inverse DFT
-Homework5
-Lecture note 5
--Lecture note 5 Divide and Conquer
-6.1 Weighted Interval Scheduling
--Weighted Interval Scheduling
-6.2 Segmented Least Squares
-6.3 Knapsack Problem
-6.4 RNA Secondary Structure
-6.5 Sequence Alignment
-6.6 Shortest Paths
-Homework6
-Lecture note 6
--Lecture note 6 Dynamic Programming
-7.1 Flows and Cuts
-7.2 Minimum Cut and Maximum Flow
--Minimum Cut and Maximum Flow
-7.3 Ford-Fulkerson Algorithm
-7.4 Choosing Good Augmenting Paths
--Choosing Good Augmenting Paths
-7.5 Bipartite Matching
-Homework7
-Lecture note 7
-8.1 Polynomial-Time Reductions
-8.2 Basic Reduction Strategies I
--Basic Reduction Strategies I
-8.3 Basic Reduction Strategies II
--Basic Reduction Strategies II
-8.4 Definition of NP
-8.5 Problems in NP
-8.6 NP-Completeness
-8.7 Sequencing Problems
-8.8 Numerical Problems
-8.9 co-NP and the Asymmetry of NP
--co-NP and the Asymmetry of NP
-Homework8
-Lecture note 8
--Lecture note 8 NP and Computational Intractability
-9.1 Load Balancing
-9.2 Center Selection
-9.3 The Pricing Method: Vertex Cover
--The Pricing Method: Vertex Cover
-9.4 LP Rounding: Vertex Cover
-9.5 Knapsack Problem
-Homework9
-Lecture note 9
--Lecture note 9 Approximation Algorithms
-10.1 Landscape of an Optimization Problem
--Landscape of an Optimization Problem
-10.2 Maximum Cut
-10.3 Nash Equilibria
-10.4 Price of Stability
-Homework10
-Lecture note 10
--Lecture note 10 Local Search
-11.1 Contention Resolution
-11.2 Linearity of Expectation
-11.3 MAX 3-SAT
-11.4 Chernoff Bounds
-Homework11
-Lecture note 11
--Lecture note 11 Randomized Algorithms
-Exam