第四节 网络系统最大流问题
2 2
5 6
6 0
7
V6
V 8 V 10
V3
6 10
V5
前向弧: 1 min{Cij fij } 2
后向弧:
2
min{ 1 , 2 } 2
V2
8 8
5 5 3 2 5
1
V4
10 19
4
V1
2 2
5 6
6 0
7
V6
V 8 V 10
而对于实际问题来说,通常需要求最大流.
那么,如何求最大流呢? 最大流可以从任何一个可行流出发来求.
这需要下面的可扩充路的概念.
定义 6.17 设 { fij }是一组可行流,如果存在一 条从起点V1 到终点V 的路P,满足 ①在P的所有前向弧上 0 fij Cij ( fij Cij ) ( fij 0) ②在P的所有后向弧上 0 fij Cij 则称P是一条关于流 { fij }的可扩充路.
对于P的所有后向弧 (0 fij Cij ) (若P无后向弧,则令 2 ) 令 2 min{ fij }
再令 min{ 1 , 2 }
最后,构造新的可行流 { f ij }, 使得
f ij fij fij
f ij
若弧 (Vi ,Vj )不在路P上 若弧 (Vi ,Vj )是路P的前向弧 若弧 (Vi ,Vj ) 是路P的后向弧
V3 V2
8
8
6 10
V5 V4
5
1
2 5
最大流不唯一
7
3 0 6 6
19
4
V1
2 2
6 3
7
V6
V 10
V3
7 10
V5
求最大流的方法:
从零流开始或者从某一取值的已知可行流 开始,选取不同的可扩充路,确定调整量ε, 不断提高可行流的值,最后得到最大流.
求可扩充路的方法:(标号法)
首先,标号法把顶点分为两种类型:已标 号的和未标号的;已标号的又分为两种类 型:已检查的和未检查的. 标号:
n
V2
7
5 5 3 0 5
1
V4
8
19
2
8
V1
2 2
6
6
1
V6
7
V3
3 10
V5
定义 6.17 设 { fij }是一组可行流,如果存在一 条从起点V1 到终点V 的路P,满足 ①在P的所有前向弧上 0 fij Cij ( fij Cij ) ( fij 0) ②在P的所有后向弧上 0 fij Cij 则称P是一条关于流 { fij }的可扩充路.
§6.4
最大流问题
例1:某公司要从起始点 vs 发送货物到目的 地 v t ,其网络如下图所示.图中每条弧旁边 的权表示这段运输路线的最大通过能力。要 求指定一个运输方案,使得从 vs 到 v t 的运货 量达到最大.
v1
60 50 30 40 50 50
v4 v5
vs
70 70 30 40
50 30 80
n
V2
7
5 5 3 0 5
1
V4
8
19
2
8
V1
2 2
6
6
1
V6
7
V3
3 10
V5
定理 6.4 对于一组可行流 { fij }来说,如果能 找到一条可扩充路P,那么 { fij }就可以改进 成一个值更大的可行流. 证明过程就是改进可行流的过程: 对于P的所有前向弧 (0 fij Cij ) ) 令 1 min{Cij fij } (若P无前向弧,则令 1
v2
40 50
vt
30 30 70 30 40
v3
vs 为起点,v t 为终 例2:下图是输油管道网, 点,其余点为中转站,弧上的数字表示该管 道的最大输油能力,问应如何安排各管道的 输油量,才能使从 vs 到 v t 的总输油量最大?
11
5 5
4 4
v1
5 4
2 3 2
v4
4 4
vs
3
v2
3 1
7
19
4
V1
2
1
6 0
7
V6
V3
6 10
V5
1. v1 , v6 称为起点和终点,其余的点称为中间点; 2. 每条弧对应一个数字 Cij ,称为弧容量; 3. 在实际问题中,每条弧都会有一个实际 流量 fij 构成网络 G 上的一个流.
网络 G
6 8
V2
2 5
V4
5
1
3 2 6 6
7
19
4
V1
2
1
V1 V2 V5 V6 逆向追踪得可扩充路:
求可扩充路的步骤: 1、给起点 V1 标号 V1 (0, ); 2、如果终点 Vn 已标号,则转向第5步; 3、对于已标号而未检查的点,转入第4步; 此时如果标号过程进行不下去,则算法结束, 所得可行流即为最大流;
4、对第3步已标号未检查的点进行检查;
3 3
2 2
v5 v6
vt
5 2 2
2
v3
2
以上两例都属于最大流问题. 最大流问题的应用非常广泛. 例如,在交通运输网络中有车流、 货物流;供水系统中有水流;金融系统 中有现金流; 通信系统中有信息流等 等. 下面首先介绍一下最大流问题的有 关概念.
网络 G
6 8
V2
2 5
V4
5
1
3 2 6 6
V2
6 8
2 5
V4
5
1
3 2 6 6
7
19
4
V1
2
1
6 0
7
V6
V 7
V3 V2
7
6 10
V5 V4
5
1
5 5 3 0
8
19
2
8
V1
2 2
2 6
6
1
V6
7
Байду номын сангаас
V 9
V3
3 10
V5
V2
8
8
2 5
V4
5
1
7
3 0 6 6
19
4
V1
2 2
6 3
7
V6
V 10
V3
7 10
V5
最大流
一个网络可能有多种可行流,值最小的可 行流显然是零流:fij 0 .
min{ 1 , 2 } 1
fij
f ij f ij f ij
若弧 (Vi ,Vj )不在路P上 若弧 (Vi ,Vj )是路P的前向弧 若弧 (Vi ,Vj ) 是路P的后向弧
V2
8 6 8
5 3 5 3 2 5
1
V4
10 8 19
4
V1
6 0
7
V6
V3
6 10
V5
可行流
定义 6.16 称满足下述条件的流为网络G的一 个可行流:
①容量限制条件:0 fij Cij ②平衡条件:
可行流的值
起点和终点:起点的净流出量=终点的净流入量;
中间点:流入总量=流出总量.
值最大的可行流称为最大流. 最大流问题就是找出某网络值最大的可行流.
5、逆向追踪得可扩充路.
请练习
171页
习题六
第5题
n
V2
6 8
4 5
V4
5
1
3 0
2
7
19
2
V1
2 2
6
6
1
V6
7
√
V3
3 10
V5
定义 6.17 设 { fij }是一组可行流,如果存在一 条从起点V1 到终点V 的路P,满足 ①在P的所有前向弧上 0 fij Cij ( fij Cij ) ( fij 0) ②在P的所有后向弧上 0 fij Cij 则称P是一条关于流 { fij }的可扩充路.
如果原可行流 { fij }的值是 V , 则新可行流 { f ij } 的值是 V .
V2
6 8
3 5 2 3 2 5
1
V4
7 8
19
4
V1
2
1 2
5 6 6
6 0
7
V6
V 7 V 8
V3
6 10
V5
前向弧: 1 min{Cij fij } 1
后向弧: 2 min{ fij } 6
V3 (2、 )
(V2 ,V3)是
V3来自V2
前向弧
检查:如果和Vi相连接的所有顶点都已 经获得标号,就称Vi已检查.
V2
6 8 3 2 6 6
1
5 2 5
1
V4
7
19
4
V1
2
6 0
7
V6
V3
6 10
V5
V4 (2, ) V2 (1, ) V1 (0, ) V5 (2, - ) V6 (5, ) V3 (1, )