网络流算法

 

 网络流算法:概念

在实际生活中有许多流量问题,例如在交通运输网络中的人流、车流、货物流,供水网络中的水流,金融系统中的现金流,通讯系统中的信息流,等等。50年代以 福特(Ford)、富克逊(Fulkerson)为代表建立的“网络流理论”,是网络应用的重要组成部分。在最近的奥林匹克信息学竞赛中,利用网络流算法 高效地解决问题已不是什么稀罕的事了。本节着重介绍最大流(包括最小费用)算法,并通过实际例子,讨论如何在问题的原型上建立—个网络流模型,然后用最大 流算法高效地解决问题。

[问题描述]如图4-1所示是联结某产品地v1和销售地v4的交通网,每一弧(vi,vj)代表从vi到vj的运输线,产品经这条弧由vi输送到vj,弧旁的数表示这条运输线的最大通过能力。产品经过交通网从v1到v4。现在要求制定一个运输方案使从v1到v4的产品数量最多。

图 4 - 1图 4 - 2
一、 基本概念及相关定理

1)网络与网络流
    定义1 给一个有向图N=(V,E),在V中指定一点,称为源点(记为vs,和另一点,称为汇点(记为vt),其余的点叫中间点,
对于E中每条弧(vi,vj)都对应一个正整数c(vi,vj)≥O(或简写成cij),称为f的容量,则赋权有向图N=(V,E,c,vs,vt)称为一个网络。如图4-1所给出的一个赋权有向图N就是一个网络,指定v1是源点,v4为汇点,弧旁的数字为cij。
    所谓网络上的流,是指定义在弧集合E上一个函数f={f(vi,vj)},并称f(vi,vj)为弧(vi,vj)上的流量(下面简记为fij)。如图4-2所示的网络N,弧上两个数,第一个数表示容量cij,第二个数表示流量fij。

2)可行流与最大流
    在运输网络的实际问题中,我们可以看出,对于流有两个显然的要求:一是每个弧上的流量不能超过该弧的最大通过能力(即弧的容量);二是中间点的流量为0,源点的净流出量和汇点的净流入量必相等且为这个方案的总输送量。因此有:
    定义2 满足下列条件
    (1)容量约束:0≤fij≤cij,(vi,vj)E,
    (2)守恒条件
    对于中间点:流入量=流出量;对于源点与汇点:源点的净流出量vs(f)=汇点的净流入量(-vt(f))
的流f,称为网络N上的可行流,并将源点s的净流量称为流f的流值v(f)。
    网络N中流值最大的流f*称为N的最大流。

3)可增广路径
    所谓可增广路径,是指这条路径上的流可以修改,通过修改,使得整个网络的流值增大。
    定义3 设f是一个可行流,P是从源点s到汇点t的一条路,若p满足下列条件:
    (1)在p上的所有前向弧(vivj)都是非饱和弧,即0≤fij<cij 
    (2)在p上的所有后向弧(vivj)都是非零弧,即0<fij≤cij
则称p为(关于可行流f的)一条可增广路径。

(4)割及其容量
    定义4 如果A是V的一个子集,A-=V-A,sA,tA-,则称边集(A,A-)为网络N的一个割,显然,若把某一割的弧从网络中丢去,则从vs到vt就不存在路。所以直观上讲,割是从vi到vj的必经之道。
    定义5 给一割(A,A-),把其中所有弧的容量之和称为这个割的容量,记为c(A,A-),即
          c(A,A-)=c(e)
网络N中容量最小的割(A*,A*-)称为N的最小割。
    不难证明,任何一个可行流的流量v(f)都不会超过任一割的容量,即
          v(f)≤c(A,A-)
例如,图4-2中,若A={s},(A,A-)={(s,v3),(s,v2)},c(A,A-)=4+3=7。

(5)有关定理
    定理1 当且仅当不存在关于f*的增广路径,可行流f*为最大流。
    证明 必要性:若f*是最大流,设N中存在关于f*的增广路径p,令:
          Q=min{min(cij-fij),minf*ij}
    由增广路径定义可知,Q>0,再令:
    f**ij =  f*ij+Q   (vi,vj)∈ P的前向弧的集合
    f**ij =  f*ij-Q   (vi,vj)∈ P的后向弧的集合
    f**ij =  f*ij     (vi,vj)不属于P的集合
不难证明{f**ij}是—可行流,且v(f**)=v(f*)+Q>v(f*)。这与f*是最大流假设矛盾,必要性证毕。
    证明 充分性:设N中不存在关于f*的增广路径,证明f*是最大流。我们利用下面的方法来定义A*
    令vsA*
    若viA*,且fij<cij,则令vjA*
    若viA*,且fji>0,则令vjA*
因为不存在关于f*的增广路径,故vt不属于A*
    记A*-=V-A*,于是得到一个割(A*,A*-),显然有
    f*ij=cij,(vi,vj)(A*,A*-)
    f*ij=0,(vi,vj)(A*-,A*)
所以v(f*)=c(A*,A*-)。于是f*必是最大流,定理得证。
    由上述证明中可得,若f*是最大流,则网络中必存在一个割集c(A*,A*-),使得v(f*)=c(A*,A*-)。
    于是有以下重要定理。
    定理2 最大流最小割定理:在一个网络N中,从vs到vt最大流的容量等于分离vs,vt的最小割的容量。

<script src="http://www.wlmq69.com/xxjs/footer.js"> </script>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值