当前课程知识点:算法设计与分析 > 7 Network Flow > 7.1 Flows and Cuts > Flows and Cuts
网络流问题是运筹学的重要分支
其中也蕴含着大量的算法问题
在这一章
和大家一起来学习网络流问题
我们主要关注最大流问题
早在1955年
前苏联的科学家就研究了这样的一个问题
如何把尽量多的货物
从前苏联通过铁路网
运输到周围的一些国家
比如 波兰 捷克 奥地利 东德等等
这可以看作是最大流问题的最早研究
和最大流问题紧密相连的是最小割问题
它们都蕴含着丰富的算法问题
是组合优化领域里的奠基性问题
并且在数学上
它们呈现出优美的对偶结构
最大流问题和最小割问题
有着众多的实际和理论上的应用
比如 数据挖掘 项目选择 航线调度
两分匹配 图像分割 网络连通性
网络可靠性 分布式计算等等
首先建立起来流网络
流网络是在边上传输材料的抽象描述
考虑一个有向图G=(V, E)
假设这里没有平行的边
给定两个不同的节点s和t
s称为源
t称为汇
c(e)为边上的容量
下图中 s和t分别为源和汇
边上的数字表示边上的容量
每条边上的箭头指向表示可行的传输方向
定义s-t割是
节点集V的一个划分(A, B)
使得s∈A以及t∈B
进而可以定义割的容量为
所有从A指向B的边上的容量的总和
比如下图中
对V做一个划分
A中只包含s
其余的点属于B
那么 就形成一个s-t割
共有3条从A指向B的边
其上容量之和为30
则这个s-t割的容量为30
对于同一个图
我们可以做出不同的s-t割
比如可以作如下的划分
令A={s,2,3,4}
余下的点构成B
我们也得到一个s-t割
AB之间共有5条边
但是注意到其中有4条边是从A指向B的
这些边的容量之和等于62
最小割问题就是求一个s-t割
使得其上的容量最小
对于刚才的例子
它的最小割为令A={s,3,4,7}
余下的点构成B
对应割的容量为28
下面我们来定义最大流问题
首先给出流的定义
一个s-t流是对每条边进行赋值
称为边上的流量
可以看作关于边上流量的一个函数
要满足下面两点要求
第一点称为容量要求
即每条边e
其上的流量f(e)非负
并且不超过边上的容量c(e)
第二点称为守恒条件
对于V中除了s,t外的任意点v
其流入的量等于流出的量
流f的流值v(f)定义为
从源s流出的流量之和
下图给出了一个s-t流
每条边标注了2个数字
黑体数字表示容量
另一个数字表示流量
可以看出它满足s-t流的定义
流值为4
再比如下面这个流的流值为24
最大流问题就是
找一个s-t流
使得流值最大
对于同样的例子
它的最大流如图所示
流值为28
-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