ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图...

226
1 6 图和网络优化

Upload: others

Post on 21-May-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

1  

 

 

 

 

第 6章    图和网络优化 

   

Page 2: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

2  

第 6章的主要内容 

6.5  最短路问题   

6.6  最大流问题 

6.7  最小费用流问题 

6.8  最大匹配问题 

   

Page 3: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

3  

 

 

 

 

6.5  最短路问题 

 

Page 4: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

4  

最短 s‐t路问题 

实例:给定一个无向图  G = (V, E),边 e  E  上定义

有费用(长度)ce  0。有两个特殊的顶点  s, t  V,

其中  s  是源顶点,t  是目标顶点。 

目标:找一条从  s  到  t  的总长度最短的路径。 

最短路问题的 IP 

定义指示变量 xe为是否使用了边 e。则最短路问题

Page 5: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

5  

的 IP 可写为: 

ex

Sx

xc

e

See

Eeee

,1,0

,1s.t.

min

S  

其中 S = {S  V: s S, t S},(S)是所有一端在 S中、另

一端在 S 外的边的集合,即割 SS , 中的所有边。 

Page 6: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

6  

最短路的 LP松弛和它的对偶 

ex

Sx

xc

e

See

Eeee

,0

,1s.t.

min

S         (LP)

S

S

S

Sy

ecy

y

S

eSeS

S

SS

,0

,s.t.

max

:   (DP) 

Page 7: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

7  

DP的一个几何解释 

对于 S中的每一个 S(可称为“城池”),都有一个“护

城河”(moat)环绕着 S。对偶变量 yS即是这个护城

河的宽度。   

DP的目标函数是挖环绕着每一个 S的护城河,使得

它们的总宽度最大,以保护每一个 S。   

当然,护城河不能无限地宽。图中的边解释为跨过

护城河的“桥”。每条边 e之下都有若干护城河 S:  e 

Page 8: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

8  

(S)。   

对任一条边 e,其跨过的护城河的总宽度不能超过 e

的长度 ce(参见对偶规划中的约束)。    

多个连续的桥构成一条路。因此,一条路至少和它

所跨过的护城河的总宽度一样长。于是,s、t 之间

的最短路长度就等于它们之间的护城河的最大宽度。 

Page 9: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

9  

 

Page 10: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

10  

最短路问题的原始‐对偶算法 

1. S, yS  0;F  。   

2. while s和 t 在(V, F)中没有连通时  do   

3.         记 C为(V, F)中包含 s的连通分支。   

4.         增加 yC,直到有一条边 e (C)成为紧的。   

5.         F  F  {e}。   

6. endwhile   7. 记 P 为(V, F)中唯一的 s‐t 路。   

Page 11: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

11  

8. return P。   

边 e是紧的:S: e (S) yS = ce。   

算法分析 

引理 6.5.1:在算法的任一时刻,F都是包含 s 的一棵树。   

证明: 

由于加入 F 的每条边都是和 s 连通的,因此 F 仅包

含一个连通分支(即,C = V(F))。   

当一条边 e要加入 F时,这条边来自于 (C),C是当

Page 12: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

12  

前 F 所包含的连通分支。   

由于 e 恰好有一个端点在 C 中,另一个端点在 C 之

外,将 e加入 F不会形成圈。   

因此 F总是一棵树。□   

 

定理 6.5.2:算法找到了一条最短 s‐t路。 

证明: 

因为 P中的每一条边都是紧的,所以有 

Page 13: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

13  

SS S

SPe SeS

SPe

e ySPyc : 。 

断言:只要 yS > 0,就有|P  (S)| = 1。 

先假设这个断言是成立的,稍后给出证明。于是就有 

OPT SS

SPe

e yc, 

从而定理成立,证明就结束了。 

反证断言。假设对某个 S S,有 yS > 0和|P  (S)| > 1。

这表明 P 穿越了(S)至少 3 次。 

Page 14: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

14  

  因此 P上就有一条子路径 P’将 S中的两个顶点连接在

了一起。 

由于 yS > 0,算法必定增加过 yS。在算法刚要增加 yS

Page 15: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

15  

的时刻,F是连接(span)S 中所有顶点的一棵树。 

于是 F  P’中就包含一个圈。这与引理 6.5.1矛盾。□ 

例子 

蓝边:紧的边。   

绿边:加入到 F中的边。   

 

Page 16: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

16  

 

Page 17: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

17  

 

Page 18: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

18  

 

Page 19: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

19  

 

Page 20: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

20  

 

Page 21: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

21  

与 Dijkstra算法的比较 

Dijkstra算法:每次加入距离 s最近的一个点。   

Page 22: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

22  

 

Page 23: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

23  

 

Page 24: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

24  

 

Page 25: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

25  

 

Page 26: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

26  

 结论:最短路的原始‐对偶算法与 Dijkstra算法本质上   

是相同的。   

Page 27: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

27  

 

 

 

 

6.6  最大流问题 

   

Page 28: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

28  

问题定义 

实例:给定有向网络  G = (V, E),  弧  e = (i, j)  E  上

定义有容量 ce  0。有两个特殊的顶点  s, t  V,其

中  s  是发点,t  是收点。 

目标:计算从  s  到  t  的满足容量约束的最大流。   

 

符号:   

定义 xij为弧(i, j)上从顶点 i到顶点 j 的流量。   

Page 29: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

29  

若流量{xij}在所有弧上均满足容量约束,在除 s 和 t

之外的所有顶点上都满足流守恒约束,则其为一个

流,记为 x。   

流 x 的流值定义为 s 点发出的流量之和与 s 点接收

的流量之和的差,即 s 点发出的“净流”流量。   

基本概念 

可行流:满足容量约束和流守恒约束的从 s到 t的流,

简称为(s, t)‐流。 

Page 30: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

30  

设 P 是 G 上从 s到 t 的一条“路”,路上弧的方向可以

任意。则:P上方向是从 s到 t的弧  (i, j)  称为前向弧。 

        P上方向是从 t到 s 的弧  (i, j)  称为后向弧。 

流 x  =  (xij)的增广路 P:P 的每个前向弧  (i,  j)  都有

ijij cx ,而 P的每个后向弧有 0ijx 。 

(s,  t)‐割:记为(S,  T),是从 S 到 T 的所有弧(有向边)

的集合。其中  (S, T)  是顶点集 V的一个划分, Ss ,

Tt 。 

Page 31: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

31  

割(S, T)的容量:

Si Tj

ijcTSc ,,即割中所有弧的容

量的和。 

最大流的增广路算法(Ford‐Fulkerson) 

基本思想:不断地找增广路来增加流,当流值不能再

增加时,就得到了最大流。 

Page 32: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

32  

标号法找增广路 

源顶点 s 具有永久标号 ),( 。   

假设当前已标号点为 i,从 i经过弧  (i, j)  或  (j, i)  对未

标号点 j 进行标号。 

若存在弧(i,  j)且 ijij cx ,则给 j 标号 ))(,( ji ,其中

)}(,min{)( ixcj ijij 。 

若存在弧(j,  i)且 0jix ,则给 j 标号 ))(,( ji ,其中

)}(,min{)( ixj ji 。 

Page 33: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

33  

标号的解释 

一般地,顶点 j的标号为 ))(,( ji 。其中, 

i 表示顶点 j 是从 i 获得的标号,即在从 s 到 j 的增广

路上,i是 j 的前驱顶点。 

i之前的符号:正号“+”表示(i, j)是前向弧,在弧(i, j)

上可以增加流。 

负号“”表示(j, i)是后向弧,在弧(j, i)上可以减少流。 

(j)表示可以增加或减少的流量的大小。 

Page 34: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

34  

 

最大流算法(标号法)(FF57) 

1    Eji , , 0ijx ,得到一个零流。 

2    给 s 一个永久标号 ),( ,LIST  {s}。 

    (LIST是已标号但未检查的顶点的集合。) 

Page 35: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

35  

3    while LIST   

4            从 LIST中取出一个顶点 i,并将 i从 LIST中删除。 

5            对每一个弧(i, j),如果 ijij cx 且 j 未标号, 

                则对 j 标号 ))(,( ji , 

                其中 )}(,min{)( ixcj ijij 。 

6            对每一个弧(j, i),如果 0jix 且 j 未标号, 

                则对 j 标号 ))(,( ji , 

                其中 )}(,min{)( ixj ji 。 

Page 36: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

36  

7            将新标号的点加入 LIST。 

8            if t 被标号  then 

9                    由点 t 开始回溯到 s 找到一条 st‐增广路, 

                        在这条路上增加流量(t)。(增广。) 

10                  清除除 s 外所有顶点的标号,LIST  {s}。 

11            endif 

12    endwhile 

13    return {xij}。(当前的流{xij}即为最大流,当前已标号

的顶点的集合形成一个最小割。) 

Page 37: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

例例 1 

37 

 

Page 38: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 38 

 

Page 39: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 39 

 

Page 40: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 40 

 

Page 41: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

例例 2:增增广路通过过逆向弧

41 

弧的例子子 

 

Page 42: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 42 

 

Page 43: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

例例 3 

43 

 

Page 44: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 44 

 

Page 45: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 45 

 

Page 46: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

时间复杂

设弧数为

杂度 

为 m,每每找一条

46 

增广路最最多需要要进行 2m

 

m 次弧

Page 47: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

47  

检查。 

不失一般性,假设所有弧容量都是整数。则最多需要

v次增广,其中 v 是最大流值。 

所以,总的时间复杂度量为 O(mv)。 

引理 1 

引理 1:设 x 是一个 s, t‐可行流,(S, T)是一个 s, t‐割。则

x 的流值等于该割中前向弧的流量之和减去后向弧的流

量之和。 

Page 48: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

48  

证明: 

流 x 的值 

sNj

jssNj

sj xxv 

     

Si iNjji

iNjij xx

        (由流守恒约束) 

     

Si TiNjji

SiNjji

TiNjij

SiNjij xxxx

 

Page 49: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

49  

     

Si TiNjji

TiNjij

SiNjji

SiNjij xxxx

 

   

Si TiNjji

TiNjij xx

 

 

Page 50: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 50 

 

Page 51: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

51  

引理 2 

引理 2:任意一个 s,  t‐可行流的流值都不超过任意一个

s, t‐割的容量。 

证明: 

设 x 是一个 s, t‐流,流值为 v。(S, T)是一个 s, t‐割。 

Si TiNjji

TiNjij xxv

        (由引理 1) 

Page 52: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

52  

     

Si TiNj

ijx

        (由非负约束) 

     

Si TiNj

ijc

        (由容量约束) 

      TSc , 。  

增广路定理 

定理 6.6.1(增广路定理)  一个可行流 x是最大流  当且

仅当  不存在关于它的从 s到 t 的增广路。 

Page 53: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

53  

证明: 

  ()。若存在增广路,则 x 的流值可以严格增加,流

x就不是最大的。 

()。已知可行流 x 不存在从 s到 t 的增广路。下面证

x是最大流。 

定义 S 是从 s 出发经过任一条增广路可达的顶点的集

合。特别地,s  S。定义 T = V – S。 

由 S 和 T 的定义,可知对任意的弧(i, j)  (S, T),有 xij = 

cij;对任意的弧(j, i)  (T, S),有 xji = 0。 

Page 54: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

54  

首先,从 s经过增广路 P可达 i。 

若 xij < cij,则由增广路的定义,P  {(i, j)}是从 s到 j

的增广路,与 j  T 矛盾。 

类似地,若 xji > 0,P  {(i, j)}也是从 s到 j 的增广路,

与 j  T矛盾。 

由引理 1,流值

Si Tjij

Si TiNjji

TiNjij cxxv

。 

由引理 2,任意流的流值都小于等于任意割的容量。

现在 x的流值等于割(S, T)的容量,因此 x 是最大流。

Page 55: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

55  

 

最大流最小割定理 

定理 6.6.3  一个流网络上最大流的流值等于该网络上最

小割的容量。 

证明: 

设 x*是一个最大流,v*是其流值。(S*, T*)是一个最小

割,c(S*, T*)是其容量。 

由引理 2,v*  c(S*, T*)。 

Page 56: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

56  

由增广路定理的证明,存在割(S, T),使得 v* = c(S, T)。 

因为(S*, T*)是最小割,有 c(S, T)  c(S*, T*),即 v*  c(S*, 

T*)。 

于是 v* = c(S*, T*)。  

 

Max‐Flow Min‐Cut定理: 

Lester R. Ford, Delbert R. Fulkerson. Maximal flow through a network. 

Canadian Journal of Mathematics, vol. 8, 1956. 

Page 57: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

57  

以及 

P. Elias, A. Feinstein, C. E. Shannon. A note on the maximum flow through a network. 

IRE  Transaction  on  Information  Theory  IT2,  117‐119, 

1956. 

整数流定理 

定理 6.6.2  如果网络中所有弧的容量都是整数,则最大

流的值也为整数。 

Page 58: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

58  

证明: 

从 0 流开始沿 s‐t 增广路增加流。由于弧上的容量都

是整数,每次在增广路上增加的流值都为整数。当最

后不能增加时,就得到了最大流,其值仍为整数。  

最大流问题的 LP 

定义 xij为弧(i, j)上从顶点 i到顶点 j 的流量。则最大

流问题的 LP可写为: 

Page 59: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

59  

0,,0,,

,,0

,

,s.t.max

vEjixEjicx

tsixx

tivxx

sivxxv

ij

ijij

iNjji

iNjij

iNjji

iNjij

iNjji

iNjij

        (LP) 

Page 60: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

  x1 

  e1 

价  0 

s  1 

v2  1 

x2  x3e2  e3

0  0

1  0

0  1

x4 x

e4 e

0

1  1 

60 

x5 x6e5 e6

0  0 

0 0

0  0 

x7  x8e7  e8

0  0 

0  0 

0  0 

 x9 v

e9

0  1

0 1

0  0

右 

0

Page 61: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

61  

v3  0  0  0  1  1  0  1  1  0  0  0 

v4  0  1  1  0  1  1  0  0  0  0  0 

v5  0  0  0  0  0  1  1  0  1  0  0 

t  0  0  0  0  0  0  0  1  1  1  0 

e1  1                  0  3 

e2    1                0  2 

e3      1              0  1 

                       

e9            1 0 2

Page 62: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

62  

最大流 LP的对偶 

线性规划(LP)的对偶为: 

EjiVi

Eji

c

ij

i

st

ijij

Ejiijij

,,0,1

,,s.t.

min,

无限制         (DP1) 

可以证明,(DP1)与(DP2)等价: 

Page 63: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

63  

EjiVi

Eji

c

ij

i

st

ijij

Ejiijij

,,0,0

1,,s.t.

min,

        (DP2) 

最小割问题 

最小 s‐t割问题 

实例:有向图 G = (V, E),弧 e = (i, j)上定义有容量 ce  

Page 64: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

64  

0。  源顶点 s  和目标顶点 t。  目标:求一个最小  s‐t割。 

最小割问题的整数规划: 

Eji

Vi

Eji

c

ij

i

st

ijij

Ejiijij

,,1,0,1,01

,,s.t.

min,

 

可以看出,对偶规划(DP2)正是最小割问题的线性规

Page 65: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

65  

划松弛。 

   

Page 66: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

66  

 

 

 

 

6.7  最小费用流问题 

   

Page 67: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

67  

问题定义 

实例:给定有向图 G = (V, E),源顶点 s  V和目的顶

点 t  V,以及流值 v。弧(i, j)  E上定义有容量 cij  0

和费用(长度)wij  0。 

询问:求一个从 s 到 t,其流值为 v的流,使流的费用

最小。流 ijxx 的费用定义为jiijij xw

, 。 

 

假设:所有的数(容量、费用、流值 v)均为整数。 

Page 68: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

说明:该

(不妨令

可以将该

该问题可

令其为原

该问题转

可能没有解

原图所有边

转换为必定

68 

解。但通

边的费用

定有解的

通过加入一

用之和再

的问题。

一条费用

加 1)的边

 

用为M

边(s, t),

Page 69: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

69  

最小费用流问题的 LP及其对偶 

)5(,,0

)4(, ,

)3(, , ,0)(

)2()(

)1()(.t.s

(LP)min),(

EjixEjicx

tsiVixx

vxx

vxx

xw

ij

ijij

jijji

jtjjt

jsjjs

Ejiijij

 

Page 70: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

70  

  x12  x13  x23  x24  x34     

  (1, 2)  (1, 3)  (2, 3)  (2, 4)  (3, 4)     

价  2  1  2  4  2  右   

v1  1  1  0  0  0  v  p1 

v2  1  0  1  1  0  0  p2 

v3  0  1  1  0  1  0  p3 

v4  0  0  0  1  1  v  p4 

(1, 2)  1  0  0  0  0  1  r12 

(1, 3)  0  1  0  0  0  3  r13 

Page 71: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

71  

(2, 3)  0  0  1  0  0  1  r23 

(2, 4)  0  0  0  1  0  3  r24 

(3, 4)  0  0  0  0  1  1  r34 

 

)8( ,)7(,,0)6(,,.t.s

(DP)max),(

VipEjirEjiwrpp

rcvpvp

i

ij

ijijij

Ejiijijst

无限制 

Page 72: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

72  

互补松紧条件 

原始和对偶最优解的互补松紧条件为: 

0 ijijijij xwrpp , Eji , ,以及 

0 ijijij cxr , Eji , 。 

该条件等价于: 

0 ijijijij xwrpp , Eji , ,以及 

ijijij cxr 0 , Eji , 。 

Page 73: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

73  

给定一组 pi,定义 ijijij wppr ,0max ,    (6.7.3) 

则{pi, rij}是对偶的一组可行解。(由 rij的定义,rij  pj – 

pi – wij,满足约束(6)。) 

由 rij的定义,可以证明: 

ijijijijij wppwrpp ,以及 

ijijij wppr 0 。 

因此互补松紧条件又等价于: 

0 ijijij xwpp , Eji , ,以及        (6.7.4) 

Page 74: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

74  

ijijijij cxwpp , Eji , 。              (6.7.5) 

因此,只要{xij}、{pi, rij}满足(6.7.3~5),则它们就分别

是原始规划 LP 和对偶规划 DP的最优解。 

两个性质 

性质: ijijijijij wppwrpp 。 

证: 

  ()。若 pj – pi < wij,由于 rij  0,显然有 pj – pi – rij < wij。 

  ()。若 pj – pi – rij < wij,即 rij > pj – pi – wij,由于 rij = 

Page 75: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

75  

max{0, pj – pi – wij},可知 rij = 0,因此 pj – pi < wij。 

性质: ijij wipjpr 0 。 

证: 

由定义,rij = max{0, pj – pi – wij}。 

若 rij > 0,则 pj – pi – wij > 0,即 pj – pi > wi。反之,若

pj – pi > wi,则 rij = pj – pi – wij > 0。 

算法的基本思想 

一个流可以分解成若干不可分流(unsplittable flow)

Page 76: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

76  

的叠加。   

一个流是最小费用流,当且仅当它在满足容量约束

的条件下,它的每一个不可分流都是费用最小的,

即“路长”最短的。   

因此,最小费用流算法的核心思想是:总是在费用

最小的增广路上增加流值,直到流值达到  v。 

如何增加流? 

从{pi = 0}(对偶可行)和{xij = 0}(原始不可行)开

Page 77: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

77  

始。 

根据  (6.7.3)  计算出  {rij}。   

当前的  {pi, rij}  是对偶规划的可行解。 

当前的  {xij}  满足约束  (3)(4)(5),不满足  (1)(2)。 

{pi}  和  {xij}  满足互补松弛条件  (6.7.4)  和  (6.7.5)。 

设流  {xij}  的值为  v’。则当前的  {pi,  rij}  和  {xij}  分

别是对偶规划和原始规划相对于流值 v’的最优解。 

若 v’ < v,则需要找  s‐t增广路增加  x  的流值。 

为了保证新的解仍是增加后的流值上的最小费用流

Page 78: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

78  

问题的最优解,找增广路时不能违反条件  (6.7.4)  和 

(6.7.5)。 

找一条增广路(1) 

首先尝试在不改变当前{pi}值的情形下找增广路。   

考察互补松紧条件(6.7.4)、(6.7.5)。若 pj – pi < wij,

则 xij = 0;若 pj – pi > wij,则 xij = cij。因此,若 pj – pi  

wij,则 xij的值就是固定的,不能增加或减小。 

所以,只能在 pj – pi = wij的弧上找增广路。由增广

Page 79: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

79  

路的定义,这样的弧又需要满足 xij < cij(前向弧)或

xij > 0(后向弧)的条件。于是,定义 

I = {(i, j) | pj – pi = wij且 xij < cij}, 

R = {(i, j) | pj – pi = wij且 xij > 0}。 

称 I  R 为允许弧(admissible arc)的集合。   

在不改变当前{pi}值的情形下找增广路,就是在 I  R

中找增广路。   

Page 80: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

80  

pi的解释 

pi的直观含义是顶点 i的“势”,也可理解为“高度”。

初始时,所有的顶点的势都为 0。顶点 s 的势固定为

0,不会改变。   

顶点 i所处的势是对从 s到 i在允许弧集合中的增广

路长度(前向弧的长度之和  –  后向弧的长度之和)

的估计。当估计不准确时,pi的值做加 1调整。   

因此,若在允许弧集合中能够找到 s‐t 增广路 P,由

Page 81: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

81  

于  pi  每次都只增加 1,路 P 实际上是所有的增广路

中费用最小的。 

找一条增广路(2) 

若在允许弧集合中找不到  s‐t 增广路,表明当前网

络上没有费用为 l  =  pt的增广路。这时就需要对{pi}

的值做出调整:将从  s  出发通过增广路不能到达的

顶点的  pi  值加  1,尝试找费用为  l + 1 的增广路。   

在找到的增广路上增加流量。重复上述过程,直到  x 

Page 82: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

82  

的流值达到  v。   

最小费用流的连续最短路算法 

Successive Shortest Path Algorithm 

([Jewell, 1958],[Iri, 1960],[Busacker, Gowen, 1961]) 

 

1    Eji , , 0ijx ; 0v ; Vi , 0ip 。 

2    while  流 x 的值 v’ < v do 

3            确定哪些弧可以改变流量。 

Page 83: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

83  

ijijijij cxwppjiI 且|, , 

0|, ijijij xwppjiR 且 。 

4            在 RI 上找一条从 s‐t 增广路 P。 

5            if  能找到  then 

6                    vvP ,min 。 

7                    沿路 P 增加流量。 

8                    vv 。 

9            else 

10                    记 T为第 4步找增广路时未获得标号的顶

Page 84: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

84  

点的集合。 

11                    T 中点的 pi值全部加 1。 

12            endif 

13    endwhile 

14    return {xij}。 

Page 85: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

例例子 

 

rij 

(1, 2) 

(1, 3)

85 

(2, 3

)  (2, 4

0

 4)  (3,

0

, 4) 

Page 86: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

86  

I    ‐  ‐  ‐  ‐  ‐ 

R    ‐  ‐  ‐  ‐  ‐ 

 

I = ,R = 。在 I  R 上找 s‐t 增广路,不能到达 t。 

Page 87: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

 

rij 

(1, 2) 

 

(1, 3)

‐ 

87 

(2, 3)

‐ 

)  (2, 4

0

 4)  (3,

0

 4) 

‐ 

Page 88: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

88  

R    ‐  ‐  ‐  ‐  ‐ 

 

v2, v3, v4的 pi值加 1。绿边:I  中的边。 

在 I  R 上找 s‐t 增广路,不能到达 t。 

Page 89: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

 

rij 

(1, 2) 

(1, 3)

89 

(2, 3

)  (2, 4

0

 4)  (3,

0

, 4) 

Page 90: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

90  

I    ‐    ‐  ‐ 

R  ‐  ‐  ‐  ‐  ‐ 

 

v3, v4的 pi值加 1。 

在 I  R 上找 s‐t 增广路,不能到达 t。 

Page 91: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

 

rij 

(1, 2) 

(1, 3)

91 

(2, 3)

)  (2, 4

0

 4)  (3,

0

 4) 

Page 92: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

92  

I    ‐    ‐   

R  ‐  ‐  ‐  ‐  ‐ 

 

v4的 pi值加 1。 

在 I  R 上找 s‐t 增广路(绿边),可以到达  t  , = 2。 

第 1 条增广路 

Page 93: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

长度:

93 

1 + 1 + 1 

 = 3 

Page 94: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

 

rij 

(1, 2) 

‐ 

 

(1, 3) 

‐ 

‐ 

94 

(2, 3)

‐ 

 

(2, 4)

‐ 

‐ 

 (3, 4

0

‐ 

4) 

Page 95: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

95  

 

红边:R  中的边。   

在 I  R 上找 s‐t 增广路,不能到达  t。 

Page 96: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

  (1, 2)  (1, 3) 

96 

(2, 3) (2, 4) 

(3, 44) 

Page 97: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

97  

rij  1  0  0  0  0 

I  ‐    ‐  ‐  ‐ 

R  ‐  ‐    ‐   

 

v2, v3, v4的 pi值加 1。 

在 I  R 上找 s‐t 增广路,不能到达 t。 

Page 98: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

  (1, 2)  (1, 3) 

98 

(2, 3) (2, 4) 

  (3, 44) 

Page 99: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

99  

rij  1  0  0  0  1 

I  ‐    ‐    ‐ 

R  ‐  ‐    ‐  ‐ 

 

v4的 pi值加 1。 

在 I  R 上找 s‐t 增广路,可以到达 t, = 1。 

第 2 条增广路 

Page 100: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

长度:

100 

3 – 1 + 3 

 = 5 

Page 101: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

 

rij 

(1, 2) 

 

 

(1, 3) 

 

 

101 

(2, 3)

 

 

(2, 4)

 

 

 (3, 4

1

 

 

4) 

Page 102: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

102  

 

橙边:既在  I  中,又在  R  中的边。 

流值到达 v = 3,结束。   

Page 103: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

103  

Ejix

Ejicxi xxxixxxixxixx

xw

ij

ijij

Ejiijij

,,0,,

3,02 ,04,31,3.t.s

(LP)min

342313

242312

3424

1312

),(

 

  (1, 2)  (1, 3)  (2, 3)  (2, 4)  (3, 4) 

xij  2  1  1  1  2 

Page 104: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

104  

cij  2  1  2  4  2 

                r12 = 1 > 0                                          r34 = 1 > 0 

VipEjir

rpprpprpprpprpp

rrrrrpp

i

ij

,,,04,314,233,213,132,11.t.s

(DP)242233max

3434

2424

2323

1313

1212

342423131214

无限制

 

Page 105: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

105  

  1  2  3  4   

pi  0  2  3  5   

  (1, 2)  (1, 3)  (2, 3)  (2, 4)  (3, 4) 

rij  1  0  0  0  1 

 

xij全部大于 0,(DP)中的 5 个约束全部取等式。   

时间复杂度 

设网络的点数为 n,弧数为 m,弧的最大费用为 w。 

找一条 s‐t 增广路需要 O(m)时间。由于要找的增广路

Page 106: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

106  

的长度每次增加 1,而增广路最长为 mw,故花费在

找增广路上的时间为 O(m2w)。 

一个顶点的 pi值修正的次数最多为 mw 次,总共有 n

个顶点,因此修改所有的 pi值的总花费为 O(nmw)。 

流值为 v,则流增广最多进行 v 次,每次增广需要花

费 O(m)时间,所以修改 xij的总花费为 O(mv)。 

所以,总的计算量为 )( 2 mvwmO 。 

Page 107: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

最最短路的的观点 

流网网络       

107 

            剩剩余网络络 

 

Page 108: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 108 

 

Page 109: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

   

109 

 

Page 110: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

110  

 

 

 

 

6.7  最大匹配问题 

   

Page 111: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

111  

本节主要内容 

二分图的对集,基本概念,主要定理 

二分图的最大匹配算法 

二分图的带权重的最大匹配——分派问题及算法 

基本概念 

图 G =  (V, E)的对集 M:M是 E的子集,且 M中任意

两条边均不相邻(都不共享顶点)。 

Page 112: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

112  

M‐饱和点 i:V(M)中的顶点(i  V(M),匹配的点)。 

M‐非饱和点 i:V(M)之外的顶点(i  V(M),没有匹配

的点)。 

极大对集 M:不存在另外一个对集M ,使得 MM 。 

最大对集 M:不存在另外一个对集M ,使得 MM 。 

完美对集 M:对集 M,匹配了 G 上所有的点。 

使用最大流算法求二分图上的最大匹配 

给定二分图 G = (V, U, E),构造流网络。 

Page 113: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

113  

增加一个源点  s,从  s  到  V  中每个顶点引一条有

向边。 

增加一个目标顶点  t,从  U  中每个顶点向  t  引一

条有向边。 

E中的边均从  V  指向  U。 

记得到的流网络为 G’  =  (V’,  E’)。G’中的每条边均为

单位容量。 

计算 G’上从  s  到  t  的最大流。 

E  中的饱和边即构成  G  上的一个最大匹配。 

Page 114: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

114  

 

Page 115: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

115  

定理 

定理:记 G’上的最大流为 f*,流值为|f*|。G 上的最

大匹配为 M*。则|f*| = |M*|。 

证明: 

首先证|f*|  |M*|。 

给定最大匹配 M*,令 G’上 M*中的边的流值为 1,s

到 M*匹配的 V 一侧点的各条边上流值为 1,M*匹配

的 U 一侧点到 t的各条边上流值为 1,则构造了一个

Page 116: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

116  

流值为|M*|的流 f。 

因此,显然有|f*|  |M*|。   

再证|f*|  |M*|。 

设 f*为 G’上的最大流。 

由整流定理,G’上每条边上的流值为整数。由于每

条边的容量均为 1,因此 G’上每条边的流值不是 0

就是 1。 

再由流守恒约束,V 中每个顶点最多有一条出去的

边流值为 1。同理,U中每个顶点最多有一条进来的

Page 117: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

117  

边流值为 1。 

记 M = {e  E | e上的流值  > 0},因此 M中的任何两

条边均不共享顶点,即,M是一个匹配,且|f*| = |M|。 

因此,显然有|f*|  |M|。    

基本概念 

M ‐交错路:边在对集 M 和 ME \ 中交错出现的路。 

M ‐增广路:起点和终点都不在 V(M)中的 M ‐交错路。 

顶点覆盖 K:K 是 V(G)的子集,且 G 的每条边都至少

Page 118: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

118  

有一个端点在 K中。 

最小顶点覆盖 K:不存在另外一个覆盖 K’,使得

KK 。 

Page 119: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

119  

顶点覆盖 

 

Page 120: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

120  

定理 6.8.1 

定理 6.8.1(Berge,  1957)图 G 中的一个匹配 M是最大

匹配当且仅当 G不包含 M‐增广路。 

(说明:G是一般图,不要求是二分图。) 

证: 

  ()。G 上若有 M‐增广路,则可以使用这条路更新 M

得到基数更大(多 1)的一个匹配,与 M是最大匹配

矛盾。 

Page 121: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

121  

()。假设 M 是一个匹配,图 G 上不含有 M‐增广路,

而 M 不是最大匹配。 

于是,存在 G 上另外一个匹配 M’,有|M’| > |M|。 

令 H是 G 上 M’M的导出子图。 

由于H中的每个顶点最多只能和M中的一条边以及M’

中的一条边关联,因此 H 中每个顶点的度都不超过 2

(都是 1 或者 2)。 

因此,H 的每个连通分支或者是边在 M 和 M’中交错

出现的路,或者是边在 M和 M’中交错出现的偶圈。 

Page 122: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

122  

由于在 G中有|M’| > |M|,而 H是M’和M的对称差,

M’在 H中的边数必然也  > M 在 H中的边数。 

这表明 H 中至少有一个连通分支,是一条起始于 M’

中的边又终止于 M’中的边的路。 

由定义,这条路是一条 M‐增广路,与给定条件矛盾。

 

通过增广路求二分图上的最大匹配 

从图 G = (S, T, E)的任意一个匹配 M 开始,比如空集。 

Page 123: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

123  

由 S 的一个未被匹配的顶点出发,用一个系统方法搜

索一条 M‐增广路 P。 

若 P 存在,则通过交换 P 在 M 和不在 M 中的边,便

得到一个其基数增加 1 的匹配。 

然后从新的匹配开始,继续迭代,直到不存在 M‐增广

路,则当前的匹配就是 G的最大匹配。 

二分图上最大匹配的标号算法 

输入:二分图 G = (S, T, E)。 

Page 124: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

124  

输出:G 的最大匹配 M。 

1    M  。 

2    对 S 中所有不在 M 中的顶点标号“”,然后 

将这些顶点都加入 Q。 

/* Q是已标号但未检查的顶点的集合  */ 

3    while Q   do 

4            从 Q中取出一个顶点 k,然后将 k从 Q中删除。 

5            if k  S then 6                    对每条同 k关联的边(k, j)  M, 

Page 125: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

125  

若 j 尚未被标号,则给点 j 标号 k, 

并将 j加入 Q。 

7            else /* k  T */ 8                    if k在M中  then /*  此时有 k  T  V(M) */ 

9                            设(i, k)是关联于 i、属于 M 的边 

(此时 i  S)。给点 i标号 k, 

并将 i加入 Q。 

10                    else /*  此时有 k  T \ V(M) */ 

11                            终止在 k 的一条增广路被找到。从 k

Page 126: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

126  

开始,反向追踪标号找到这条增广

路 P,路的起始顶点有标号“”。 

12                            用增广路 P更新 M。 

13                            删除 G 上所有的标号。重新对 S中所

有不在 M 中的顶点标号“”,然

后将这些顶点都加入 Q。 

14                    endif 

15            endif 

16    endwhile 

Page 127: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

127  

17    return M。(此时 S中没有标号的点的集合和 T中已

标号的点的集合构成对偶于 M 的最小顶点覆盖。) 

Page 128: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

例例子 

128 

Page 129: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

找找到一条增广路(11, 7)。更

129 

更新M。

 

Page 130: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

找找到一条增广路(22, 8)。更

130 

更新M。

 

Page 131: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

找找到一条增广路(33, 10)。更

131 

更新M。  

Page 132: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

找找到一条增广路(44, 10, 3, 9

132 

9)。更新新 M。  

Page 133: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

找找不到增广路,结结束。 

133 

 

Page 134: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

{红红边}为最最大匹配配,{蓝色

134 

色顶点}为顶顶点覆盖

 盖。 

Page 135: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

135  

时间复杂度分析 

令|S| = m,|T| = n,假设 m  n。 

找一条增广路(或判断不能找到)标号算法最多进行

O(mn)次检查(因为最多有这么多条边)。 

初始匹配最多被增广 m次。 

所以,总的计算量为 O(m2n)。 

Page 136: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

136  

解释 

从 S中未匹配的顶点开始,标号找M‐增广路的过程,

实际上是一个从 S 中未匹配的顶点开始进行类广度

优先搜索的过程。 

该过程与标准的广度优先搜索不完全相同。 

设搜索树的根位于第 1 层。区别仅在于,在搜索过

程中,奇数层顶点(在 S 一侧)按广度优先展开;

偶数层顶点(在 T 一侧)按 M 中的(唯一一条)边

Page 137: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

137  

顺延(而不是按广度优先展开)。 

Page 138: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 138 

 

Page 139: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

139  

标号,找增广路。 

Page 140: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 140 

 

Page 141: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

找增广路

虚线表示

过程中形

v5, u3相

形成的搜

邻,但在

141 

搜索树 

在对 v5进进行检查的

 的过程中中,u3

Page 142: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

142  

已经标号,因此从 v5不能对 u3标号。 

增广,找到一个更大的匹配 

Page 143: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 143 

 

Page 144: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

144  

广度优先搜索的观点 

Page 145: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

 

145 

   

Page 146: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

146  

中间:构造的辅助图。 

顶点集  = V。 

从 v1到 v2有一条有向边,当且仅当   u  U,使得

(v1, u)  M,(u,    v2)  M(即,从 v1开始经过一条细

的边和一条粗的边能够到达 v2  )。   

右图:从辅助图上入度为 0的点 v2开始的广度优先搜索。 

Hall定理 

定理 6.8.2(Hall, 1935)  设 G = (S, T, E)是一个二分图。 

Page 147: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

147  

则:G含有匹配 S 中的每个点的匹配  当且仅当   

              X  S,有|(X)|  |X|。                          (*) 

证: 

()。假设 G有一个匹配 M,匹配了 S中所有的顶点。 

任取 S的一个子集 X。则 X通过 M匹配到的点的集合

Y是 X 的一个子集。因此 XYX 。 

()。反证。假设 G 满足(*)式,但 G 没有匹配 S 中所

有顶点的匹配。 

令 M*是 G的一个最大匹配。则 M*没有匹配 S 中所有

Page 148: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

148  

的顶点。设 u 是一个未被 M*匹配的顶点。 

令 Z 为从 u 出发经过 M*‐交错路可达的所有顶点的集

合。 

由 M*‐交错路的定义,从 u 出发的这样一条路 P必终

止于 S,见下图所示。 

Page 149: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

149  

                       

u S

T  

否则(终止于 T),P就成为一条 M*‐增广路,与 M*

是最大匹配矛盾。因此,Z 中除 u外所有的点都被 M*

匹配。 

令 X = Z  S,Y = Z  T。则 u  X。由于 X \ {u}中的点

Page 150: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

150  

与 Y 中的点在 M*下匹配,因此 

                                    |Y| = |X|  1。 

Y

X u S

T

  断言:(X)  Y。 

Page 151: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

151  

若断言成立,则|(X)|  |Y| = |X|  1 < |X|,与(*)矛

盾,于是定理证毕。 

下面证明断言。 

任取 X中一个顶点 x,设 x 的邻居集合 (x) = {y1, y2, 

y3, …}。因为 x 是从 u开始通过 M*‐交错路可达的,x

必关联一条匹配边,相应的邻居顶点设为 y1;其余顶

点为 y2, y3, …,它们是 x 经过非匹配边到达的顶点。 

Page 152: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

152  

x

y1y2 y3   由于 x是通过某条M*‐交错路 P经过 y1到达的,因此,

由 Y 的定义,y1  Y。(实际上,仅有一条从 u出发的

M*‐交错路到达 x,这是因为 x只能关联一条匹配边。) 

Page 153: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

153  

由于 u, …, y1, x是 M*‐交错路,u, …, y1, x, y2也是 M*‐

交错路。于是,y2在 Y 中。同理,y3等其他顶点都在

Y中。□ 

König定理 

定理 6.8.3(König, 1931)在二分图中,最大基数对集的

边数等于最小顶点覆盖的点数。 

证: 

设 G = (S, T, E)是一个二分图,M*是 G 上的最大匹配。

Page 154: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

154  

通过构造一个大小和|M*|相等的最小顶点覆盖来证

明定理。 

令 U 表示 S 中 M*未匹配的顶点的集合,Z 表示从 U

中的顶点出发经过 M*‐交错路能够到达的顶点的集合。 

令 X = Z  S,Y = Z  T。 

由 Y 的定义,可知 M*匹配了 Y中的所有的顶点。 

定义 K = (S \ X)  Y。 

Page 155: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

155  

Y

X U

S \ X

  我们声明,G 上不可能有跨在 X和 T \ Y之间的边。若

有这样的边,比如(x,  t)(t 不在 Y中),则 t是经过从

U出发的 M*‐交错路可达的,于是,t 应该在 Y 中,矛

Page 156: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

156  

盾。因此,G 中的每一条边至少有一个端点在 K 中,

即,K是一个顶点覆盖。 

由于 S中未被 M*匹配的点都在 U 中,S \ X中的点都

是被 M*匹配的,因此|M*| = |K|。 

由于 M*中的所有边都是不相交的,任意的顶点覆盖

至少要覆盖 M*中的所有边。于是,K是最小顶点覆盖。

 

Page 157: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

157  

二分图上带权重的最大匹配问题 

实例:二分图 G = (S, T, E),边上定义有非负权重{we}。 

目标:找图G上的一个匹配M,使得总权重  e  M we

最大。 

Page 158: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

该问题可通过过如下步

158 

 

步骤转换

 

换为完全二二分图上上的最

Page 159: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

159  

小权重完美匹配问题。后者即是总所周知的指派问题1。 

(1)  对二分图顶点数目少的一侧增加顶点,使得两

侧顶点数目相同。 

(2)  添加边将图变成完全二分图,新添加的边上的

权重为 0。 

(3)  找一个足够大的数 A,将每条边 e 上的权重修

                            1说明:教材[DLMS07]上将二分图上带权重的最大匹配问题称为指派问题。

[HL10]  及[KV12]上将完全二分图上的最小权重完美匹配问题称为指派问

题。实际上,这两个问题是等价的,可以相互转换。 

Page 160: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

160  

改为 A – we。A的选择应使修改后的权重为非负的。 

指派问题 

事实上,指派问题可以很容易地归约到最小费用流

问题解决。 

设 G = (S, T, E)为指派问题中的二分图,|S| = |T|= n。 

增加一个源点 s,以及 s 到 S 中各个顶点之间的边。增

加一个目标顶点 t,以及 T 中各个顶点到 t 之间的边。

图中所有的边都改为有向边,其方向为从 s 到 t 的方

Page 161: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

161  

向。记如此得到的图为 G’。 

将 s 到 S 之间的边以及 T 到 t 之间的边的费用设为 0。

将图中所有边的容量均设为 1。这就得到了最小费用

流的实例。 

于是,G’上任意一个流值为 n的整数流,其在 S  T 中

流值大于 0的边,构成 G上一个相同费用的完美匹配,

反之亦然。 

Page 162: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

下面,我们专专门介绍

162 

绍求解指派派问题的的匈牙利算法。 

Page 163: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

163  

匈牙利算法 

1955年,Harold Kuhn(1925‐2014,美国)对指派

问题给出了一个组合算法。Kuhn将其称为“匈牙利算法”,

是因为该算法主要基于两位匈牙利数学家 Dénes Kőnig

和 Jenő Egerváry的工作。 

[Kuh55] H. W. Kuhn. The Hungarian method for the 

assignment problems. Naval Research Logistics 

Quarterly, 2:83‐97, 1955. 

Page 164: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

164  

The basic idea of the Hungarian method is to convert the 

original cost table of the problem into a series of 

equivalent cost tables containing many zeros. When there 

are sufficiently many zeros, we will get an assignment with 

zero cost. Since the total cost cannot be negative, this 

assignment must be optimal. 

 

The simplest transformation is to subtract the minimum of 

a row (resp., column) from this row (resp., column). 

Page 165: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

165  

Example 

Solve the following assignment problem. 

 

Page 166: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

166  

Solution. 

After subtracting the corresponding minimum from each 

row, we get   

 Now, each row has a zero and each column has a zero. 

An optimal solution can be gotten by observation.   

Page 167: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

167  

 

However, the condition that each row has a zero and each 

column has a zero is only a necessary condition for an 

optimal solution. 

Consider the following example. 

Page 168: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

168  

 After subtracting the corresponding minimum from each 

column, we get 

Page 169: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

169  

 Now, this table contains a zero in each row and in each 

column. However, we cannot find a solution of zero cost 

from it.   

 

Page 170: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

170  

The key is that, if we use horizontal and vertical lines to 

cross out the zeros in the table, the number of lines 

needed is less than n ‐‐ the number of rows (or columns). 

 In general, the minimum number of lines needed to cross 

Page 171: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

171  

out all zeros equals to the maximum number of 

assignments that can be made to zero element positions. 

 

So, we must create sufficiently many zeros in the table by 

equivalent transformations. 

 

We do this by (i) subtract the minimum number not 

crossed out from the entire table, and (ii) add this number 

to every crossed out rows and columns to eliminate 

negative elements appeared. 

Page 172: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

172  

 

Page 173: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

173  

 Note that the number at row 3 and column 2 becomes 120, 

since we add 30 two times to this position. 

 

Page 174: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

174  

A shortcut for obtaining this cost table from the preceding 

one is to subtract 30 from just the elements without a line 

through them and then add 30 to every element that lies 

at the intersection of two lines. 

 

Now we need (at least) four lines to cross out all zeros, still 

not five. 

 

Page 175: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

175  

 Now the minimum number of uncrossed out elements is 

30. By subtracting 30 from all the uncrossed out elements 

and add it to the elements lying at intersections of two 

lines, we get 

Page 176: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

176  

 For this table, the minimum number of lines crossing out 

all zeros is five. So, we can find a solution at zero cost, 

which must be an optimal solution to the original problem. 

 

Page 177: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

177  

The optimal solution is 

1a‐‐2, 1b‐‐3, 2a‐‐1, 2b‐‐5, 3‐‐4. 

 

The Hungarian Algorithm. 

1 (Row reduction) Subtract the smallest number in   

each row from every number in the row. 

2 (Column reduction) Subtract the smallest number in   

each column from every number in the column. 

3 while the minimum number of lines to cross out   

all zeros is not equal to n do 

Page 178: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

178  

4        Subtract the smallest uncovered (i.e., not   

crossed out) number from every uncovered 

number in the table. 

5        Add the smallest uncovered number to the   

numbers at intersections of covering lines. 

6 endwhile 

7 repeat 

8        Find a row or column that contains the least   

number of zeros. 

9        Make an assignment at the position that contains   

Page 179: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

179  

a zero of this row (or column). 

10      Cross out both the row and column involved at   

this position. 

11 until n assignments has been found. 

12 return the complete set of assignments ever found. 

 

P.S. 

 

Given a n  n matrix A, to find the minimum number of 

lines crossing out all zeros is not a “quite” easy problem. 

Page 180: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

180  

This problem can be converted into the Vertex Cover 

problem in bipartite graph as follows. 

 

We put n vertices u1, …, un in U, where each vertex denotes 

a row of matrix A, and another n vertices v1, …, vn in V, 

where each vertex denotes a column of matrix A. If there is 

a zero at the position row i and column j in matrix A, then 

we put an edge between ui and vj. Let the resulting graph 

be G. 

 

Page 181: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

181  

Then, the minimum number of lines crossing out all zeros 

in A equals to the minimum number of vertices covering all 

edges in G. 

 

A minimum vertex cover on graph G can be found as 

follows. First, find a maximum matching M in graph G. 

Then, label the vertices along any M‐alternating path. The 

unlabeled u‐vertices and the labeled v‐vertices constitute 

a minimum vertex cover of G. (The details can be found in 

several textbooks of operations research or combinatorial 

Page 182: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 

o

 

ptimizatiion.) 

182 

 

Page 183: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

183  

二分图上带权重的最大匹配问题的原始对偶算法 

说明:教材[DLSM07]中将“二分图上带权重的最大

匹配问题”亦称为指派问题。 

问题的 LP 及其对偶 DP: 

Ejix

Tjx

Six

LPxw

ij

jNiij

iNjij

Ejiijij

),( ,0

,1

,1.t.s

)(max

)(

)(

),(

       TjvSiu

Ejiwvu

DPvu

j

i

ijji

Tjj

Sii

,0,0

),(,.t.s

)(min

 

Page 184: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

184  

互补松驰条件: 

ijjiij wvux 0         (6.8.5) 

10 j

iji xu            (6.8.6) 

10 i

ijj xv            (6.8.7) 

基本思想(原始‐对偶算法) 

算法从可行对集M = 和可行对偶解{ui = maxj{wij}}, 

{vj  =  0}开始。这时(6.8.5)和(6.8.7)全都满足,(6.8.6)

Page 185: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

185  

都不满足。 

算法总是在仅由满足 

                                  ui + vj = wij 

的边{(i, j)}构成的子网络上,找 S 中从 ui > 0 的顶点 i

出发的增广路。 

若这样的增广路能够找到,则用它更新当前的M后,

(6.8.5)和(6.8.7)仍然是满足的,而(6.8.6)比以前多一

些被满足。 

若这样的增广路找不到,则算法调整 ui和 vj的值。 

Page 186: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

186  

当没有匹配的点的 ui调整到 0时,(6.8.6)全部满足,

算法求到最优解。 

匈牙利算法 

[Kuhn, 1955] 

  1    M  ;i  S, ui  max{wij}; 

j  T, vj  0,  j  + 。 

  2    给 S 中未匹配的顶点标“”。 

  3    while S中有未检查的标号点    或                    (*) 

Page 187: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

187  

                  T中有 j = 0的未检查的标号点    (**)    do 

  4            找一个符合(*)或(**)的顶点 k。   

  5            if k  S then 

  6                    对于每条边(k, j)  M,若 uk + vj – wij < j, 

                        则对 j 标号“i”,并令 j  uk + vj – wij。   

7            else /* k  T,j = 0 */ 

  8                    if k  V(M) then 

  9                            设(i, k)  M。对 i标号“k”。   

10                  else /* k  V(M) */ 

Page 188: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

188  

11                          从顶点 k 反向追踪到标号为“”的点, 

                              得到一条增广路 P。用 P更新 M。   

12                           j  T,  j  +。 

                              抹去所有点上的标号,回到第 2 步。   

13                  endif   

14          endif   

15 endwhile   

16 1  min{ui | i  S},2  min{j | j > 0, j  S}, 

        min{1, 2}。   

Page 189: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

189  

17  对 S 中的每个有标号的顶点,ui  ui  ; 

  对 T 中每个  j = 0的顶点,  vj  vj + ; 

  对 T 中每个有标号且 j > 0的顶点,  j  j  。   

18  若  < 1,则回到第 3步。   

19 /*  否则,找到了最大权重匹配  */ 

return M。   

Page 190: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

190  

例子 

Page 191: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 191 

 

Page 192: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 192 

 

Page 193: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 193 

 

Page 194: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 194 

 

Page 195: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 195 

 

Page 196: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 196 

 

Page 197: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 197 

 

Page 198: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 198 

 

Page 199: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 199 

 

Page 200: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 200 

 

Page 201: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 201 

 

Page 202: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 202 

 

Page 203: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 203 

 

Page 204: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 204 

 

Page 205: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 205 

 

Page 206: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 206 

 

Page 207: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 207 

 

Page 208: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 208 

 

Page 209: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 209 

 

Page 210: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 210 

 

Page 211: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 211 

 

Page 212: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 212 

 

Page 213: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 213 

 

Page 214: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 214 

 

Page 215: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 215 

 

Page 216: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 216 

 

Page 217: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 217 

 

Page 218: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 218 

 

Page 219: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 219 

 

Page 220: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 220 

 

Page 221: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 221 

 

Page 222: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 222 

 

Page 223: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 223 

 

Page 224: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

 224 

 

Page 225: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

225  

一般图上的最大匹配问题 

最大基数匹配: 

[Edm65a] Jack Edmonds. Paths, trees, and flowers. Canad. 

J. Math. 17:449–467, 1965. 

[MV80] Silvio Micali, Vijay V. Vazirani. An O(sqrt(|V|) |E|) 

Algorithm for Finding Maximum Matching in General 

Graphs. FOCS 1980:17‐27. 

[Vaz14] A proof of the MV matching algorithm. 

http://www.cc.gatech.edu/~vazirani/new‐proof.p 

Page 226: ch06 - 图和网络优化 · 2015-12-23 · 4 最短s‐t 路问题 实例:给定一个无向图 G = (V, E),边e E 上定义 有费用(长度)c e 0。有两个特殊的顶点

226  

 

最大权重匹配: 

[Edm65b] Jack Edmonds. Maximum matching and a 

polyhedron with 0,1‐vertices. Journal of Research 

National Bureau of Standards Section B, 69:125–130, 

1965. 

[DP14] Ran Duan, Seth Pettie. Linear‐time approximation 

for maximum weight matching, JACM, 

61(1)1:23,2014.