算法思想之8网络流与匹配
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3 4
网络的物品流等等实际问题。
定义2
输油管道
给定一个网络 G=(V,E),如果一个实值函数 f:V×V→R满足下列三个性质:
容量约束性质,即任取u,v∈V,
均有 f(u,v) ≤c(u,v);
反对称性质,即任取 u,v ∈V,
均有 f(u,v)= -f(v,u); 有向图
流守恒性质,即任取u ∈V-{s,t}, 均有 f (u, v) 0。
f ( S , T ) f (u, v)
uS ,vT
23
c(S,T) = c(v1,v3) + c(v2,v4) = 12 + 14 = 26 f(S,T) = f(v1,v3) + f(v2,v4) + f(v2,v3) = 12 + 11 + (-0) = 23
24
4
2011/1/26
给定一个网络 G=(V,E),令f为G的流,Gf为G 中关于流f的剩余网络,p为Gf中从s到t的一 条增广路径。定义函数fp:V×V→R如下:
cf(p)=4 |p|=3
19
c ( p) f (u , v) c ( p ) 0
f p f
(u,v)是p上的边
(v,u)是p上的边 否则
11
G
cf(u,v)=c(u,v)-f(u,v)
Gf 特点:剩余网络中的边: 原边 逆边 每条边的容量均大于 0。
12
2
2011/1/26
相关概念 — 增广路径
定义4
证明引理1
证明思路:证明f+f’满足流的三个性质。 (1)容量约束性质: (f+f’)(u,v)=f(u,v)+f’(u,v) ≤f(u,v)+cf(u,v) =f(u,v)+(c(u,v)-f(u,v)) =c(u,v)
寻找最大匹配的基本过程
M=0; repeat 寻找增广路径 p,
定理:给定一个无向图G=(V,E),图G 的一个匹配M是最大匹配的充要条件 是G不包含关于M的增广路径。
39
M=M
p;
until G中不存在增广路径; return M;
40
二分图匹配
假设图G=(V,E)的顶点能够被划分为两个顶点 集合L和R,即V=L∪R,且L的顶点没有边相连, R的顶点也没有边相连。E的边都跨越集合L和
7
u
u
抵消
8/10 3/4
5/10
0/4
v
v
8
8.1.1 FordFulkerson方法
FordFulkerson方法是求解最大流问题 的一个经典方法,它的基本思想是从任 何一个可行流开始,沿增广路径对流进
算法框架
初始化一条可行的路径 while (存在增广路径){ 对路径实施增广;
行增广,然后不断重复此过程,直到网
33 34
定义10 给定一个无向图G=(V,E),设M是图 G的一个匹配,如果G的每一个顶点都被M匹 配,则称M是完全匹配。
定义11 给定一个无向图G=(V,E),设M 是图G的一个匹配,则称 G中由匹配边与 未匹配边交错出现的一条简单路径为一 条关于M的交错路径。如果交错路径p的 起点和终点重合,则该路径称为交错回 路。如果交错路径p的起点和终点都不 是匹配起点,则该路径称为关于M的一 条增广路径。
络中不存在增广路径为止。
9
}
10
相关概念 — 剩余网络
定义3 给定一个网络G,其流为f, 容量函数为c。关于流f的剩余容量函 数cf定义如下:对任意一对u,v∈V, cf(u,v)=c(u,v)-f(u,v)。 流f的剩余网络是一个有向图Gf=(V,E), 其容量函数由cf定义,边集由 Ef={(u,v):cf(u,v)>0}确定。
8.2 匹配问题
匹配问题在资源规划、机器调度以及人员分 配等领域有许多实际的应用价值。 定义9 给定一个无向图G=(V,E),一个匹配 是一个边的集合 M(E的子集),使得对所有 顶点v∈V,M中至多有一条边与 v相连。如果 M中某条边与顶点 v相连,则说顶点 v被M匹 配;否则说v未匹配,称M中的边为匹配边。 |M|为边的条数。
2011/1/26
主要内容
第 8章
8.1 最大流问题 8.2 匹配问题
网络流与匹配
1
2
8.1 最大流问题
最大流问题可以用来解决流经管道的 液体流、装配线上的零件流、流过电 路的电流、互联网上的信息流、运输
定义1
给定有向图G=(V,E),对于图G的每一 条边(u,v) ∈E,都有一个非负的容 量c(u,v) ≥0,如果(u,v)E,则 c(u,v)=0,并且图中有两个特殊的顶 点s,t,其中顶点s只有出边,t只有 入边,并且图G中至少存在一条从 s到 t的路径,称此有向图为网络,顶点s 为源点,顶点t为汇点。
43
将二分图变换成网络
44
利用匈牙利树寻找二分图最大匹配
定理:给定二分图G=(V,E),其顶点划 分为 V=L∪R。设G’=(V’,E’)是构造的 网络。如果M是G的匹配,则G’中存 在一整数流f,且|f|=|M|;反过来,如 果 f是 G’的整数流,则G中有一匹配M 满足 |M|=|f|。 结论:二分图G的最大匹配就是网络流 G’的最大流。
交错路径:v1,v2,v7,v8,v4 交错回路:v1,v2,v7,v6,v1 增广路径:v5,v6, v1,v2,v7,v8,v4,v3
37
M p {(v , v ), (v , v )(v , v ), (v , v )}
1 2 6 5 Baidu Nhomakorabea 8 3 4
38
引理4:
给定一个无向图G (V, E),设M是图G的一个 匹配,p是关于M的一条增广路径,则M p 是图G的一个匹配,且有 | M p || M | 1。
R,V的每个顶点至少有一条边与之相连。
二分图的最大匹配问题就是找|M|最大的一个 匹配集合M。
41 42
7
2011/1/26
利用最大流算法寻找二分图最大匹配
首先,将二分图变换成网络图。 具体方法如下: 设G是二分图,G’是构造的网络。 添加两个新结点:源点 s与汇点t, V’=V∪{s,t}。如果 G的顶点划分为 V=L∪R, G’的有向边由下式给出: E’= {(s,u):u∈L} ∪{(u,v):u∈L,v∈R且(u,v) ∈E} ∪{(v,t):t∈R}
引理3
给定一个网络 G=(V,E),f为G的流。对于 G的 任意一个割(S,T) ,有f(S,T)=|f|。
=================================================
定理(最大流最小割定理)
给定一个网络 G=(V,E),f为G的流,则下列 三个结论相互等价: (1)f是G的最大流; (2)剩余网络Gf不存在增广路径; (3)存在一个割(S,T) ,使得 |f|=c(S,T)。
13
(2)反对称性质:
(3)流守恒性质:
15
16
根据定义可知
增广路径
定义5 给定一个网络 G,令f为G的流, 则称剩余网络Gf中从s到t的一条有向路 径p为增广路径。
17
18
3
2011/1/26
引理2
定义 6 给定剩余网络Gf中从 s到 t
的一条增广路径p,将 p上的最小剩 余容量cf(p)称为瓶颈容量,其中 cf(p)= min{cf(u,v):(u,v) ∈p}, 并记 |p|为路径 p包含的边数。 瓶颈容量给出了增广路径上可以增 加的最大流量。
vV
则称f为网络G的流,其中 f(u,v)表示从顶 点u到顶点v的流量。
5 6
1
2011/1/26
| f | f ( s, v)
vV
|f|表示从源点s流出的流量大小。
流为f的网络称为流网络。 f(u,v)=c(u,v)称边(u,v)为饱和边。 f(u,v) / c(u,v) 所谓最大流问题: 对于给定的G=(V,E), 寻找从源点到汇点的 的流f,且|f|最大。
36
35
6
2011/1/26
定义12 给定两个边的集 合M1和M2,定义:
M M ( M M 2) ( M M )
1 2 1 1 2
匹配: M={ (v1,v6),(v2,v7),(v4,v8) } 增广路径: p = { (v5,v6),(v6,v1),(v1,v2), (v2,v7),(v7,v8),(v8,v4),(v4,v3) }
则fp是Gf的流,且|fp|=cf(p)>0。
20
推论1
给定一个网络G=(V,E),f为G的流,Gf 为G中关于流f的剩余网络,p为Gf中从s 到t的一条增广路径。fp定义如引理2, 则f+fp为G的流,且 |f+fp|=|f|+|fp|>|f| ================================= 结论:如果能够找到一条增广路径,就 可以在f的基础上增加fp,从而得到流 量更大的网络G。
14
给定一个网络G,f1,f2是G的流, 令(f1+f2)(u,v)=f1(u,v)+f2(u,v),
则称f1+f2为流f1,f2的和。
引理1 给定一个网络G=(V,E),令 f为G的
流,Gf为G关于流f的剩余网络,令f’为Gf 的流,则流和f+f’仍然是G的流,且有 |f+f’|=|f|+|f’|。
① 只要 GL中有从 s到 t的路径 p,就用 fp对当前的流 f进行增广,即 f+fp,从 GL和 Gf中移去饱和边, 并相应地更新 GL和 Gf。 ② 根据剩余网络 Gf计算层次图 GL。
29 30
GL
利用广度优先搜索 思想寻找层次图。
5
2011/1/26
时间复杂性O(|v||E|2)
31 32
21
原网络
剩余网络
增广后网络
22
相关概念 — 网络的割
定义7:给定一个网络G=(V,E) ,网络的一 个割(S,T)是把网络G的顶点集 V分成两个子 集S和T=V-S且s∈S,t∈T,其中割 (S,T)的 容量记为c(S,T),定义为
c( S , T ) c(u, v)
uS ,vT
流过割(S,T) 的流量记为 f(S,T),定义为
25
void FordFulkerson(G,s,t,c) { for each edge(u,v) ∈E do // 初始化初始路径 f(u,v) = 0; while (存在增广路径p) { cf(p) ←min{ cf(u,v): (u,v)是 p 上的边 } for each edge(u,v) 在 p上 do f(u,v) ←f(u,v) + cf(p); 更新剩余网络; 算法时间复杂性: } O(|E||f*|) } f*是算法找到的最大流
47 48
8
2011/1/26
49
50
9
26
8.1.2 最短路径增广算法
定义8 给定一个网络G=(V,E),定义层 次图GL=(V,E′),其中
E′={(u,v):(u,v)∈E,且d[v]=d[u]+1}
d[v]称为顶点v 的层次,是从源点s到v 的路径中最短路径的边数。
27
28
如此增广 20000 次
G
确定增广路径的算法思想
1. 首先将流初始化为0,并将网络的剩余网络 Gf初始化为原图G; 2. 计算层次图; 3. 重复执行下列操作,直到t不在GL中:
45
思路:寻找一棵交错路径树。 如果一条交错路径以未匹配顶点结
束,则该交错路径是一条增广路径。
如果交错路径树的叶子顶点都是匹
配顶点,则称为匈牙利树。
46
求出最大二分匹配的匈牙利算法
从任意匹配M开始; while 存在不匹配的顶点 { r为L 中不匹配的顶点; 利用深度优先搜索的思想, 以r为根扩展 T树中的交替路径; if (T是匈牙利树 ) G=G-T; else { 寻找T中的一条增广路径 M M p; }
网络的物品流等等实际问题。
定义2
输油管道
给定一个网络 G=(V,E),如果一个实值函数 f:V×V→R满足下列三个性质:
容量约束性质,即任取u,v∈V,
均有 f(u,v) ≤c(u,v);
反对称性质,即任取 u,v ∈V,
均有 f(u,v)= -f(v,u); 有向图
流守恒性质,即任取u ∈V-{s,t}, 均有 f (u, v) 0。
f ( S , T ) f (u, v)
uS ,vT
23
c(S,T) = c(v1,v3) + c(v2,v4) = 12 + 14 = 26 f(S,T) = f(v1,v3) + f(v2,v4) + f(v2,v3) = 12 + 11 + (-0) = 23
24
4
2011/1/26
给定一个网络 G=(V,E),令f为G的流,Gf为G 中关于流f的剩余网络,p为Gf中从s到t的一 条增广路径。定义函数fp:V×V→R如下:
cf(p)=4 |p|=3
19
c ( p) f (u , v) c ( p ) 0
f p f
(u,v)是p上的边
(v,u)是p上的边 否则
11
G
cf(u,v)=c(u,v)-f(u,v)
Gf 特点:剩余网络中的边: 原边 逆边 每条边的容量均大于 0。
12
2
2011/1/26
相关概念 — 增广路径
定义4
证明引理1
证明思路:证明f+f’满足流的三个性质。 (1)容量约束性质: (f+f’)(u,v)=f(u,v)+f’(u,v) ≤f(u,v)+cf(u,v) =f(u,v)+(c(u,v)-f(u,v)) =c(u,v)
寻找最大匹配的基本过程
M=0; repeat 寻找增广路径 p,
定理:给定一个无向图G=(V,E),图G 的一个匹配M是最大匹配的充要条件 是G不包含关于M的增广路径。
39
M=M
p;
until G中不存在增广路径; return M;
40
二分图匹配
假设图G=(V,E)的顶点能够被划分为两个顶点 集合L和R,即V=L∪R,且L的顶点没有边相连, R的顶点也没有边相连。E的边都跨越集合L和
7
u
u
抵消
8/10 3/4
5/10
0/4
v
v
8
8.1.1 FordFulkerson方法
FordFulkerson方法是求解最大流问题 的一个经典方法,它的基本思想是从任 何一个可行流开始,沿增广路径对流进
算法框架
初始化一条可行的路径 while (存在增广路径){ 对路径实施增广;
行增广,然后不断重复此过程,直到网
33 34
定义10 给定一个无向图G=(V,E),设M是图 G的一个匹配,如果G的每一个顶点都被M匹 配,则称M是完全匹配。
定义11 给定一个无向图G=(V,E),设M 是图G的一个匹配,则称 G中由匹配边与 未匹配边交错出现的一条简单路径为一 条关于M的交错路径。如果交错路径p的 起点和终点重合,则该路径称为交错回 路。如果交错路径p的起点和终点都不 是匹配起点,则该路径称为关于M的一 条增广路径。
络中不存在增广路径为止。
9
}
10
相关概念 — 剩余网络
定义3 给定一个网络G,其流为f, 容量函数为c。关于流f的剩余容量函 数cf定义如下:对任意一对u,v∈V, cf(u,v)=c(u,v)-f(u,v)。 流f的剩余网络是一个有向图Gf=(V,E), 其容量函数由cf定义,边集由 Ef={(u,v):cf(u,v)>0}确定。
8.2 匹配问题
匹配问题在资源规划、机器调度以及人员分 配等领域有许多实际的应用价值。 定义9 给定一个无向图G=(V,E),一个匹配 是一个边的集合 M(E的子集),使得对所有 顶点v∈V,M中至多有一条边与 v相连。如果 M中某条边与顶点 v相连,则说顶点 v被M匹 配;否则说v未匹配,称M中的边为匹配边。 |M|为边的条数。
2011/1/26
主要内容
第 8章
8.1 最大流问题 8.2 匹配问题
网络流与匹配
1
2
8.1 最大流问题
最大流问题可以用来解决流经管道的 液体流、装配线上的零件流、流过电 路的电流、互联网上的信息流、运输
定义1
给定有向图G=(V,E),对于图G的每一 条边(u,v) ∈E,都有一个非负的容 量c(u,v) ≥0,如果(u,v)E,则 c(u,v)=0,并且图中有两个特殊的顶 点s,t,其中顶点s只有出边,t只有 入边,并且图G中至少存在一条从 s到 t的路径,称此有向图为网络,顶点s 为源点,顶点t为汇点。
43
将二分图变换成网络
44
利用匈牙利树寻找二分图最大匹配
定理:给定二分图G=(V,E),其顶点划 分为 V=L∪R。设G’=(V’,E’)是构造的 网络。如果M是G的匹配,则G’中存 在一整数流f,且|f|=|M|;反过来,如 果 f是 G’的整数流,则G中有一匹配M 满足 |M|=|f|。 结论:二分图G的最大匹配就是网络流 G’的最大流。
交错路径:v1,v2,v7,v8,v4 交错回路:v1,v2,v7,v6,v1 增广路径:v5,v6, v1,v2,v7,v8,v4,v3
37
M p {(v , v ), (v , v )(v , v ), (v , v )}
1 2 6 5 Baidu Nhomakorabea 8 3 4
38
引理4:
给定一个无向图G (V, E),设M是图G的一个 匹配,p是关于M的一条增广路径,则M p 是图G的一个匹配,且有 | M p || M | 1。
R,V的每个顶点至少有一条边与之相连。
二分图的最大匹配问题就是找|M|最大的一个 匹配集合M。
41 42
7
2011/1/26
利用最大流算法寻找二分图最大匹配
首先,将二分图变换成网络图。 具体方法如下: 设G是二分图,G’是构造的网络。 添加两个新结点:源点 s与汇点t, V’=V∪{s,t}。如果 G的顶点划分为 V=L∪R, G’的有向边由下式给出: E’= {(s,u):u∈L} ∪{(u,v):u∈L,v∈R且(u,v) ∈E} ∪{(v,t):t∈R}
引理3
给定一个网络 G=(V,E),f为G的流。对于 G的 任意一个割(S,T) ,有f(S,T)=|f|。
=================================================
定理(最大流最小割定理)
给定一个网络 G=(V,E),f为G的流,则下列 三个结论相互等价: (1)f是G的最大流; (2)剩余网络Gf不存在增广路径; (3)存在一个割(S,T) ,使得 |f|=c(S,T)。
13
(2)反对称性质:
(3)流守恒性质:
15
16
根据定义可知
增广路径
定义5 给定一个网络 G,令f为G的流, 则称剩余网络Gf中从s到t的一条有向路 径p为增广路径。
17
18
3
2011/1/26
引理2
定义 6 给定剩余网络Gf中从 s到 t
的一条增广路径p,将 p上的最小剩 余容量cf(p)称为瓶颈容量,其中 cf(p)= min{cf(u,v):(u,v) ∈p}, 并记 |p|为路径 p包含的边数。 瓶颈容量给出了增广路径上可以增 加的最大流量。
vV
则称f为网络G的流,其中 f(u,v)表示从顶 点u到顶点v的流量。
5 6
1
2011/1/26
| f | f ( s, v)
vV
|f|表示从源点s流出的流量大小。
流为f的网络称为流网络。 f(u,v)=c(u,v)称边(u,v)为饱和边。 f(u,v) / c(u,v) 所谓最大流问题: 对于给定的G=(V,E), 寻找从源点到汇点的 的流f,且|f|最大。
36
35
6
2011/1/26
定义12 给定两个边的集 合M1和M2,定义:
M M ( M M 2) ( M M )
1 2 1 1 2
匹配: M={ (v1,v6),(v2,v7),(v4,v8) } 增广路径: p = { (v5,v6),(v6,v1),(v1,v2), (v2,v7),(v7,v8),(v8,v4),(v4,v3) }
则fp是Gf的流,且|fp|=cf(p)>0。
20
推论1
给定一个网络G=(V,E),f为G的流,Gf 为G中关于流f的剩余网络,p为Gf中从s 到t的一条增广路径。fp定义如引理2, 则f+fp为G的流,且 |f+fp|=|f|+|fp|>|f| ================================= 结论:如果能够找到一条增广路径,就 可以在f的基础上增加fp,从而得到流 量更大的网络G。
14
给定一个网络G,f1,f2是G的流, 令(f1+f2)(u,v)=f1(u,v)+f2(u,v),
则称f1+f2为流f1,f2的和。
引理1 给定一个网络G=(V,E),令 f为G的
流,Gf为G关于流f的剩余网络,令f’为Gf 的流,则流和f+f’仍然是G的流,且有 |f+f’|=|f|+|f’|。
① 只要 GL中有从 s到 t的路径 p,就用 fp对当前的流 f进行增广,即 f+fp,从 GL和 Gf中移去饱和边, 并相应地更新 GL和 Gf。 ② 根据剩余网络 Gf计算层次图 GL。
29 30
GL
利用广度优先搜索 思想寻找层次图。
5
2011/1/26
时间复杂性O(|v||E|2)
31 32
21
原网络
剩余网络
增广后网络
22
相关概念 — 网络的割
定义7:给定一个网络G=(V,E) ,网络的一 个割(S,T)是把网络G的顶点集 V分成两个子 集S和T=V-S且s∈S,t∈T,其中割 (S,T)的 容量记为c(S,T),定义为
c( S , T ) c(u, v)
uS ,vT
流过割(S,T) 的流量记为 f(S,T),定义为
25
void FordFulkerson(G,s,t,c) { for each edge(u,v) ∈E do // 初始化初始路径 f(u,v) = 0; while (存在增广路径p) { cf(p) ←min{ cf(u,v): (u,v)是 p 上的边 } for each edge(u,v) 在 p上 do f(u,v) ←f(u,v) + cf(p); 更新剩余网络; 算法时间复杂性: } O(|E||f*|) } f*是算法找到的最大流
47 48
8
2011/1/26
49
50
9
26
8.1.2 最短路径增广算法
定义8 给定一个网络G=(V,E),定义层 次图GL=(V,E′),其中
E′={(u,v):(u,v)∈E,且d[v]=d[u]+1}
d[v]称为顶点v 的层次,是从源点s到v 的路径中最短路径的边数。
27
28
如此增广 20000 次
G
确定增广路径的算法思想
1. 首先将流初始化为0,并将网络的剩余网络 Gf初始化为原图G; 2. 计算层次图; 3. 重复执行下列操作,直到t不在GL中:
45
思路:寻找一棵交错路径树。 如果一条交错路径以未匹配顶点结
束,则该交错路径是一条增广路径。
如果交错路径树的叶子顶点都是匹
配顶点,则称为匈牙利树。
46
求出最大二分匹配的匈牙利算法
从任意匹配M开始; while 存在不匹配的顶点 { r为L 中不匹配的顶点; 利用深度优先搜索的思想, 以r为根扩展 T树中的交替路径; if (T是匈牙利树 ) G=G-T; else { 寻找T中的一条增广路径 M M p; }