首页 百科知识 解决网络最大流问题

解决网络最大流问题

时间:2023-06-09 百科知识 版权反馈
【摘要】:子任务5.2 解决网络最大流问题5.2.1 任务引入 求图5-11所示的网络最大流,弧旁的权数表示。②网络中的一个可行流f*是最大流的充分必要条件是,不存在关于f*的增广链。③在一个网络D中,最大流的流量等于分离vs和vt的最小截集的截量。下面一起来了解求解网络最大流问题的方法:标号法。再去掉所有的标号,对新的可行流f′={fi′j},重新进行标号过程,直到找到网络D的最大流为止。

子任务5.2 解决网络最大流问题

5.2.1 任务引入

【任务5-2】 求图5-11所示的网络最大流,弧旁的权数表示(cij,fij)。

img350

图5-11

5.2.2 任务分析

参看后面的知识建构,则我们可以得出以下结论:

①一个网络D中,任何一个可行流f的流量v(f)都小于或等于这个网络中任何一个截集img351的截量。并且,如果网络上的一个可行流f*和网络中的一个截集img352,满足条件v(f*)=Cimg353,那么f*一定是D上的最大流,而img354)一定是D的所有截集中截量最小的一个(即最小截集)。

②网络中的一个可行流f*是最大流的充分必要条件是,不存在关于f*的增广链。

③在一个网络D中,最大流的流量等于分离vs和vt的最小截集的截量。

由上面的结论可知,我们可以得出一个寻求网络系统最大流的方法:如果网络D中有一个可行流f,只要判断网络是否存在关于可行流f的增广链。如果没有增广链,那么f一定是最大流;如有增广链,那么可以按照上述结论③,不断改进和增大可行流f的流量,最终可以得到网络中的一个最大流。

下面一起来了解求解网络最大流问题的方法:标号法。

从网络中的一个可行流f出发(如果D中没有f,可以令f是零流),运用标号法,经过标号过程和调整过程,可以得到网络中的一个最大流。

用给顶点标号的方法来定义img355。在标号过程中,有标号的顶点是img356中的点,没有标号的点不是img357中的点。如果vt有了标号,表示存在一条关于f的增广链。如果标号过程无法进行下去,并且vt未被标号,则表示不存在关于f的增广链。这样,就得到了网络中的一个最大流和最小截集。

(1)标号过程

在标号过程中,网络中的点分为标号点(分为已检查和未检查两种)和未标号点。每个标号点的标号包括两部分:第一个标号表示这个标号是从哪一点得到的,以便找出增广链;第二个标号是为了用来确定增广链上的调整量θ。

标号过程开始,先给vs标号(0,+∞)。这时,vs是标号未检查的点,其他都是未标号点。一般地,取一个标号未检查点vi,对一切未标号点vj

①如果在弧(vi,vj)上,fij<cij,那么给vj标号[vi,l(vj)]。其中l(vj)=min[l(vi),cij-fij]。这时,vj成为标号未检查点。

②如果在弧(vj,vi)上,fji>0,那么给vj标号[-vi,l(vj)]。其中l(vj)= min[l(vi),fij]。这时,vj成为标号未检查点。

于是vi成为标号已检查的点。重复以上步骤,如果所有的标号都已经检查过,而标号过程无法进行下去,则标号法结束,这时的可行流就是最大流。但是,如果vt被标上号,表示得到一条增广链μ,转入下一步调整过程。

(2)调整过程

首先按照vt和其他点的第一个标号,反向追踪,找出增广链μ。例如,令vt的第一个标号是vk,则弧(vk,vt)在μ上。再看vk的第一个标号,若是vi,则弧(vi,vk)都在μ上。依次类推,直到vs为止。这时,所找出的弧就成为网络D的一条增广链μ。取调整量θ=l(vt),即vt的第二个标号,

img358

非增广矩阵上的各弧流量不变。

再去掉所有的标号,对新的可行流f′={fi′j},重新进行标号过程,直到找到网络D的最大流为止。

5.2.3 知识建构

1)网络流基本概念

(1)网络与网络流

网络:设一个赋权有向图D=(V,A),在V中指定一个发点vs和一个收点vt,其他的点叫做中间点。对于D中的每一个弧(vi,vj)∈A,都有一个权cij称为弧的容量。我们把这样的图D叫做一个网络系统,简称网络,记做D=(V,A,C)。

网络流:指在一定条件下渡过一个网络的某种流在各边上的流量的集合。定义在弧集合A上的一个函数:F={f(vi,vj)}={fij},则f(vi,vj)=fij叫做弧在(vi,vj)上的流量,简记为fij

如图5-12所示,图(a)上数字为弧容量,图(b)上括号内数字为弧流量。

图5-12

网络系统上流的特点:

①发点的总流出量和收点的总流入量必相等;

②每一个中间点的流入量与流出量的代数和等于零;

③每一个弧上的流量不能超过它的最大通过能力(即容量)。

(2)可行流

可行流:是指满足以下条件的一个网络流。

①容量条件:对于每一个弧(vi,vj)∈A,有0≤fij≤cij

②平衡条件:对于发点vs,有∑fsj-∑fjs=v(f)

      对于收点vt,有∑ftj-∑fjt=-v(f)

      对于中间点,有∑fij-∑fji=0

其中发点的总流量(或收点的总流量)v(f)称为这个可行流的流量。

(3)最大流

最大流:是指在一个网络中,流量最大的可行流。

图5-13

可行流中fij=cij的弧称为饱和弧,fij<cij的弧称为非饱和弧。fij>0的弧为非零流弧,fij=0的弧叫做零流弧。

如图5-13所示,(v4,v3)是饱和弧,其他的弧是非饱和弧,并且都是非零流弧。

设μ是网络D中连接发点vs和收点vt的一条链。定义链的方向是从vs到vt,于是链μ上的弧被分为两类:一是弧的方向与链的方向相同,称为前向弧,前向弧的集合记做μ+;二是弧的方向与链的方向相反,称为后向弧,后向弧的集合记做μ-。如图5-13所示,则在链(vs,v1,v2,v3,v4,vt)中,μ+={(vs,v1),(v1,v2),(v2,v3),(v4,vt)},μ-={(v4,v3)}。

增广链:f是一个可行流,如果链μ满足以下条件:

①在弧(vi,vj)∈μ+上,有0≤fij<cij,即μ+中的每一条弧是非饱和弧。

②在弧(vi,vj)∈μ-上,有0<fij≤cij,即μ-中的每一条弧是非零流弧。则称μ为从vs到vt的关于f的一条增广链。

例如在图5-13中,链μ=(vs,v1,v2,v3,v4,vt)就是一条增广链。

2)网络的截集和截集容量

(1)网络的截集

(2)截集容量

设一个截集img363,则截集img364中所有弧的容量之和,称为这个截集的容量,记为Cimg365,即Cimg366=∑cij

[示例]如图5-14所示。

img367

图5-14

则:S=(vs,v2img368

(S,S)=img369(vs,v1),(v2,v4),(v2,v3img370 Cimg371= cs1+ c24+ c23= 7+6+5=18

[示例]如图5-15所示。

图5-15

img373

img374

5.2.4 任务实施

用标号法对任务5-2进行任务实施。

步骤一 标号过程

(1)首先给vs标号(0,+∞)。

(2)看vs:在弧(vs,v2)上,fs2=cs3=3,不具备标号条件。在弧(vs,v1)上,fs1=1<cs1=5,故给v1标号[vs,l(v1)],其中l(v1)=min[l(vs),(cs1-fs1)]=min[+∞,5-1]=4。

(3)看v1:在弧(v1,v3)上,f13=c13=2,不具备标号条件。在弧(v2,v1)上,f21=1>0,故给v2标号[-v1,l(v2)],其中l(v2)=min[l(v1),f21]=min[4,1]=1。

(4)看v2:在弧(v2,v4)上,f24=3<c24=4,故给v4标号[v2,l(v4)])。其中:l(v4)=min[l(v2),(c24-f24)]=min[1,1]=1。在弧(v3,v2)上,f32=1>0,故给v3标号[-v2,l(v3)]。其中:l(v3)=min[l(v2),f32]=min[1,1]=1。

(5)在v3,v4中任意选一个,比如v3,在弧(v3,vt)上,f3t=1<c3t=2,故给vt标号[v3,l(vt)],其中:l(vt)=min[l(v3),(c3t-f3t)]=min[1,1]=1。因为vt被标上号,根据标号法,转入调整过程。

步骤二 调整过程

从vt开始,按照标号点的第一个标号,用反向追踪的方法,找出一条从vs到vt的增广链μ,如图5-16中双箭线所示。

图5-16

不难看出,μ+={(vs,v1),(v3,vt)},μ-={(v2,v1),(v3,v2)},取θ=1,在μ上调整f,得到

img376

其他的fij不变。

调整后的可行流,如图5-17所示,再对这个可行流重新进行标号过程,寻找增广链。

图5-17

首先给vs标号(0,+∞),给v1标号(vs,3)。看v1,在弧(v1,v3)上,f13=c13,弧(v2,v1)上,f21=0,均不符合标号条件。因此标号过程无法进行下去,不存在从vs到vt的增广链,算法结束。

这时,网络中的可行流f′即是最大流,最大流的流量v(f′)=fs1+fs2=5。同时,也找出D的最小截集img378,其中S*={vs,v1}是标号的集合,img379{v,v,23v4,vt}是未标号的集合。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈