流的概念及算法-Read

发布时间 : 星期三 文章流的概念及算法-Read更新完毕开始阅读

第一讲 流的概念及算法

一、概念 1. 什么是流

将目标由一个地点运送至另一个地点叫流。 从图的角度:流是一条途径。 2. 发点,收点,单位

3. 有容量的弧:通过弧的单位流量的数量是有限的。

最大容量:c(x, y) 费用:a (x, y)

网络:图中的每条弧都带有一个容量。 4. 弧的流:f (x, y)

分类:N, I, R 二、几个问题和算法 i (x, y)=c (x, y)-f (x, y) r (x, y)=f (x, y)

1. 可以追加的单位流量 I1? 例

min{i{x,y)}

(x,y)?Ps 1 2 t i (s,1)=5 i (1,2)=3 i (2,t)=1 I1?min(i(s,1),i(1,2),i(2,t))?min5,(3,1)?1

2. 可以减少的单位流量 I2? 例

min{r(x,y}

(x,y)?P's 1 2 t

r (1, s)=1 r (2, 1)=3 r (t, 2)=5 I2?min{r(1,s),r(2,1),r(t,2)}?min1,{3,5}?1

3. 如何增加从s至t的净流

前向弧,后向弧

I3?min{min[i(x,y):(x,y)为前向弧],min[r(x,y):(x,y)为后向弧

s 1 2 3 4 t

i (s, 1)=4 i (1, 2)=3 r (3, 2)=5 r (4, 3)=2 i (4, t)=3

I3=min{min[i (s, 1), i (1, 2), i (4, t)], min[r (3, 2), r (4, 3) ]}

=min{min[4, 3, 3], min[5, 2]}=2

流的增值链:可以运送追加单位流量的弧称为流的增值链。 4. 算法

a) 主要思想:从发点s生长出一棵由已着色的弧组成的树,追加的单位流量可以沿着

这些弧从s运出。 b) 增值算法:

I. 确定集合N、I、R中的元素,对s着色。

II. 按下列规则,对弧和顶点着色,直至t被着色或不可能再进行着色为止:如果

顶点x已着色,y未着色,则在下列情况之一时,可对顶点y和弧(x, y)着色: 1) 如果弧(x, y)?I,则对顶点y和弧(x, y)着色;如果(x, y)?I,则对y和弧(x,

y)不着色。

2) 如果弧(x, y)?R,则对顶点y和弧(y, x)着色。

如果t被着色,则从s至t存在一条由已着色弧组成的唯一链,此链即流的增值链。否则,如在算法终止以后,t仍未被着色,则从s至t不存在流的增值链。终止。

c) 例

a b s t c

d

i (s, a)=4, r (s, c)=1, i (a, c)=3, r (a, b)=7, i (b, t)=2, r (c, d)=5, r (b, d)=3, r (s, a)=6, r (b, c)=2

最大流的增值链为:

a b s t c

d

最大流的增值为

min{ i (s, a), i (a, c), r(b, c), i (b, t)} =min{4,3,2,2}=2 d) 证明

I. 引理7-3 如果算法对t已着色,则从s至t存在一条流的增值链。

II. 引理7-4 如果算法不能对t着色,则从s至t不存在任一条流的增值链。 III. 引理7-5 算法在有限步内可终止。

IV. 定理7-3 对于给定的图,算法可以找到(如果存在的话)一条流的增值链。

第二讲 最大流算法

1.最大流问题 (maximum flow problem)

在一个有容量的图中,从发点s到收点t,找到一条可以运送最大数量的单位流量的途径,并且不超过弧的容量。

从s至t的每一个流都必须满足下列三个条件:

(1) 在从s至t的任一个流中,从每个顶点x (x≠ s, x≠ t) 出去的单位数量必须等于 到达x的单位数量,即

y?X?f(x,y)-?f(y,x)=0 (x≠s,x≠t) (1)

y?X其中X是G中所有顶点的集合,f(x, y)表示经弧(x, y)运输的单位数量。

(2)经弧(x, y)运输的流的单位数量不大于弧(x, y)的容量c(x, y),即 0≤f(x, y) ≤ c(x, y) (x, y) ∈ E (2) 其中E是所有弧的集合。

(3)从发点流出的单位流量的净数V必等于流入收点的单位流量的净数,即

y?X?f(s,y)-?f(y,s)=V (3)

y?Xy?X?f(y,t)-?f(t,y)=V (4)

y?X 满足这三个条件的数值f(x, y)的集合必对应于从s至t的流。

如果可以找到一个满足这四个条件的数值f(x, y)的集合,(x, y)∈E,则这些数值对应于从s至t的流。因此,当(x, y)∈E时,数值f(x, y)的集合是一个流,当且仅当这个集合满足关系式(1)へ(4)时。

上面提到的最大流问题就是求V的最大植。也就是V在关系式(1)へ(4)的约束条件下,求V的最大植。这是一个线性规划问题,这里不用单纯形方法,而用一个比较直观的方法求解,称为最大流算法。

2. 最大流的算法 (1) 算法的思路

从s至t的任一个流(可以是零流)开始,用流的增值算法寻找流的增值链。如果找一条s至t的流的增值链,则沿着这条链运送尽可能多的单位流量。然后再找另一条流的增值链,…。如果再也找不到流的增值链,则算法终止。现有的从s至t的流就是从s至t的最大流。

(2) 算法7-8 最大流的算法

第1步 选择任一个从s至t的起始流,即选择满足式(1)へ式(4)的f(x, y)数值的任一个集合。对所有(x, y)也可以选择f(x, y)=0作为起始流/

第2步 如果f(x, y)

i(x, y)=c(x, y)-f(x, y), (x, y) ∈I 如果f(x, y)>0,则令

r(x, y)=f(x, y), (x, y) ∈R

第3步 对于第2步确定的集合I和R,执行算法7-7。执行算法7-7后如找不到流的增值链,则算法7-8终止;现有的流就是最大流。否则,沿着算法7-7所发现的流的增值链,做出最大可能流的增值。返回第二步。

3. 实例

[例] 给定有弧容量的图如图7-20所示,用算法7-8找出从s至t的最大流。

c

4 1

2 3 2 s a b t

3 图 7-20 有弧容量的图

联系合同范文客服:xxxxx#qq.com(#替换为@)