最大网络流

 1 基本概念和术语


( 1 ) 网络

G 是一个简单有向图, G=(V,E) , V={1 , 2 , … , n} 。在 V 中指定一个顶点 s ,称为源 和另一个顶点 t ,称为汇 。有向图 G 的每一条边 (v,w) ∈ E ,对应有一个值 cap(v,w)≥0 ,称为边的容量 。这样的有向图 G 称作一个网络 。

( 2 ) 网络流

网络上的流 是定义在网络的边集合 E 上的一个非负函数 flow={flow(v,w)} ,并称 flow(v,w) 为边 (v,w) 上的流量 。

( 3 ) 可行流

满足下述条件的流 flow 称为可行流 :
① 容量约束 : 对每一条边 (v,w) ∈ E , 0≤flow(v,w)≤cap(v,w) 。
② 平衡约束 :
对于中间顶点:流出量 = 流入量。
即对每个 v ∈ V(v≠s,t) 有:顶点 v 的流出量-顶点 v 的流入量 =0 ,即


对于源 s : s 的流出量- s 的流入量 = 源的净输出量 f ,即

对于汇 t : t 的流入量- t 的流出量的 = 汇的净输入量 f ,即

式中 f 称为这个可行流的流量,即源的净输出量 ( 或汇的净输入量 ) 。可行流总是存在的。
例如,让所有边的流量 flow(v,w)=0 ,就得到一个其流量 f=0 的可行流 ( 称为 0 流 ) 。

( 4 ) 边流

对于网络 G 的一个给定的可行流 flow ,将网络中满足 flow(v,w)=cap(v,w) 的边称为饱和边 ; flow(v,w)<cap(v,w) 的边称为非饱和边 ; flow(v,w)=0 的边称为零流边 ; flow(v,w)>0 的边称为非零流边 。当边 (v,w) 既不是一条零流边也不是一条饱和边时,称为弱流边 。

( 5 ) 最大流

最大流问题即求网络 G 的一个可行流 flow ,使其流量 f 达到最大。即 flow 满足:0≤flow(v,w)≤cap(v,w) , (v,w) ∈ E ;且

 

( 6 ) 流的费用

实际应用中,与网络流有关的问题,不仅涉及流量,而且还有费用的因素。此时网络的每一条边 (v,w) 除了给定容量 cap(v,w) 外,还定义了一个单位流量费用 cost(v,w) 。对于网络中一个给定的流 flow ,其费用定义为:

 

 

( 7 ) 残流网络

对于给定的一个流网络 G 及其上的一个流 flow ,网络 G 关于流 flow 的残流网络 G* 与 G 有相同的顶点集 V ,而网络 G 中的每一条边对应于 G* 中的 1 条边或 2 条边。
设 (v,w) 是 G 的一条边。
当 flow(v,w)>0 时,( w,v )是 G* 中的一条边,该边的容量为 cap*(w,v)=flow(v,w) ;
当 flow(v,w)<cap(v,w) 时, (v,w) 是 G* 中的一条边,该边的容量为cap*(v,w)=cap(v,w)-flow(v,w) 。
按照残流网络的定义,当原网络 G 中的边 (v,w) 是一条零流边时,残流网络 G* 中有唯一的一条边 (v,w) 与之对应,且该边的容量为 cap(v,w) 。
当原网络 G 中的边 (v,w) 是一条饱和边时,残流网络 G* 中有唯一的一条边 (w,v) 与之对应,且该边的容量为 cap(v,w) 。
当原网络 G 中的边 (v,w) 是一条弱流边时,残流网络 G* 中有 2 条边 (v,w) 和 (w,v) 与之对应,这 2 条边的容量分别为 cap(v,w) -flow(v,w) 和 flow(v,w) 。
残流网络是设计与网络流有关算法的重要工具。

增广路算法


 1 算法基本思想
设P是网络G中联结源s和汇t的一条路。定义路的方向是从s到t。将路P上的边分成2类:一类边的方向与路的方向一致,称为向前边 。向前边的全体记为P+。另一类边的方向与路的方向相反,称为向后边 。向后边的全体记为P-。
设flow是一个可行流,P是从s到t的一条路,若P满足下列条件:
(1)在P的所有向前边(v,w)上,flow(v,w)<cap(v,w),即P+中的每一条边都是非饱和边;
(2)在P的所有向后边(v,w)上,flow(v,w)>0,即P-中的每一条边都是非零流边。
则称P为关于可行流flow的一条可增广路 。
可增广路是残流网络中一条容量大于0的路。
将具有上述特征的路P称为可增广路是因为可以通过修正路P上所有边流量flow(v,w)将当前可行流改进成一个流值更大的可行流。
增流的具体做法是:
(1)不属于可增广路P的边(v,w)上的流量保持不变;
(2)可增广路P上的所有边(v,w)上的流量按下述规则变化:
· 在向前边(v,w)上,flow(v,w)+d;
· 在向后边(v,w)上,flow(v,w)-d。
按下面的公式修改当前的流。

 


其中d称为可增广量,可按下述原则确定:d取得尽量大,又要使变化后的流仍为可行流。按照这个原则,d既不能超过每条向前边(v,w)的cap(v,w)-flow(v,w),也不能超过每条向后边(v,w)的flow(v,w)。因此d应该等于向前边上的cap(v,w)-flow(v,w)与向后边上的flow(v,w)的最小值。也就是残流网络中P的最大容量。
增广路定理 :设flow是网络G的一个可行流,如果不存在从s到t关于flow的可增广路P,则flow是G的一个最大流。

动画演示一:

 

动画演示二:

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/akof1314/archive/2009/11/18/4826291.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值