流网络
流网络是一个有向图, G=(V,E) ,图中的每条边有一个非负的容量值 c(u,v)≥0 .如果 (u,v)∉E ,则定义 c(u,v)=0 。且在流网络中含有两个特殊的点:源节点 s 和汇结点 t 。
流网络的形式化定义如下:
设 G=(V,E) 为一个流网络,其容量函数为 c 。 G 中的流是一个实值函数 f:V×V→R ,满足如下性质:
容量限制:对于所有结点 u,v∈V ,其中 0≤f(u,v)≥c(u,v) .
对于所有结点 u∈V−s,t ,其中
∑v∈Vf(v,u)=∑v∈Vf(u,v)
f(u,v) 为从结点 u 到结点 v 的流。
流
一个流的值 |f| 定义为:
|f|=∑v∈Vf(s,v)−∑v∈Vf(v,s)
即,流
f 的值为从源结点流出的总流量
减去流入源结点的总流量。
最大流问题就是在给定的流网络中找到最大的流。
Ford-Fulkerson
之所以称它为方法,是因为它本身包含了几种运行时间各不相同的具体实现。
在了解Ford-Fulkerson方法之前,我们先来看以下几个概念。
残存网络
在给定的流网络 G 和流 f ,* 残存网络 Gf *由那些仍有空间对流量进行调整的边构成。其残存流量定义为
cf(u,v)=c(u,v)−f(u,v)
只有当
cf(u,v)>0 ,才将边
<u,v> 加入到残次网络中。
更一般的,残存容量可以定义为:
假定有一个流网络
G=(V,E) ,其源结点为
s ,汇结点为
t 。设
f 为图
G 中的一个流,考虑结点对
u,v∈V 的残存容量
cf(u,v) :
cf(u,v)=⎧⎩⎨c(u,v)−f(u,v),f(u,v)0若(u,v)∈E若(u,v)∈E其他
而残存网络的每条边,即残存边必须允许大于0的流量通过。