一、流网络
对于一个流网络 G=(V,E) 是一个有向图,其中每条边 (u,v)∈E 均有一个非负容量 c(u,v)≥0 ,每条边实际流通的流量记为f(u,v)。流网络中有两个特别的顶点:源点s和汇点t。如下图所示:
(注:“x/y”,其中x为边上的实际流量 f(u,v) ,y表示边上的流量限制 c(u,v) )
流网络满足以下两条性质:
(1) 容量限制(capacity contraint):对于所有的节点 u 和 v ,要求满足:
(2) 流量守恒(flow conservation):对于所有的非源点和汇点的结点 u ,要求:
扩展:双向流网络
一般的流网络中边的流向是单向的,对于双向边的流网络,处理方法是引入虚拟节点,使得双向边转化为单向边。
其他一些基础概念:
(1)残存网络(residual network)
假定有一个流网络G=(V,E),其源点为s,汇点为t,f为G中的一个流。对即节点对(u,v),定义残存容量(residual capacity)
一个流网络(左)以及它的对应残存网络(右)示例图如下:
残存网络是如何增大原始流网络中的流的一种指示。
(2)增广路径(augmenting paths)
设P是网络G中联结源点s和汇点t的一条路。定义路的方向是从s到t。
将路P上的边分为两类:一类边的方向与路的方向一致,称为向前边,向前边的全体记为P+;另一类边的方向与路的方向相反,称为向后边,向后边的全体记为P-。
设f是一个可行流,P是从s到t的一条路,若P满足下列条件:
- 在P的所有向前的边(u,v)上,f(u,v)<c(u,v),即P+中的每一条边都是非饱和的边;
- 在P的所有向后的边(u,v)上,f(u,v)>0,即P-中的每一条边都是非零流边。
则称P为关于可行流f的一条增广路径。
二、最大流问题
流经网络的可行流量 (feasible flow) 记为:
也即表示为由源节点流出的所有流量减去发送节点流进的所有流量。类似针对汇聚点有:
所谓网络最大流(maximum flow)问题就是给定一个带有收发节点的网络G,在满足流网络约束的条件下使得流经网络的可行流量v (f )最大。
割:设X⊆V (s∈X, t∉X),称 O(X) 是分离源点 s 和汇点 v 的割,并且
最小割性质:设 f={f(u,v)} 是带源点和汇点的容量网络G中任一个可行流。O(X)是G中任一个割。则(1) v(f)≤c(O(X));(2)如果v(f)=c(O(X)),那么f是D中的最大流,同时O(X)是D中的最小割。
可行流f是最大流当且仅当G中不存在(关于f的)(s,t)-增广路径。
最大流最小割定理:任一个带源点和汇点的容量网络,最大流的流量等于最小割的容量。
整数最大流定理:任一个带源点和汇点的容量网络,若所有的弧的容量都是整数,那么总存在整数最大流。
三、最大流求解算法