52
第第第 第第第 Greedy Algorithm Greedy Algorithm 第第 第第第 () 第第 第第第 () 第第第第第第 第第第第第第

第五章 Greedy Algorithm

Embed Size (px)

DESCRIPTION

第五章 Greedy Algorithm. 邹权(博士) 计算机科学系. 5.1 Elements of Greedy Algorithms 5.2 An activity-selection problem 5.3 Huffman codes 5.4 Minimal spanning tree problem. 提要. Greedy 算法的基本概念 Greedy 选择性 优化子结构 与动态规划方法的比较 Greedy 算法正确性证明方法. 5.1 Elements of Greedy Algorithms. Optimal. - PowerPoint PPT Presentation

Citation preview

Page 1: 第五章 Greedy  Algorithm

第五章第五章

Greedy AlgorithmGreedy Algorithm

邹权(博士)邹权(博士)计算机科学系计算机科学系

Page 2: 第五章 Greedy  Algorithm

5.15.1 Elements of Greedy Elements of Greedy AlgorithmsAlgorithms

5.25.2 An activity-selection problemAn activity-selection problem

5.3 5.3 Huffman codes Huffman codes

5.4 5.4 Minimal spanning tree Minimal spanning tree problemproblem

提要提要

Page 3: 第五章 Greedy  Algorithm

5.15.1 Elements of Greedy Elements of Greedy AlgorithmsAlgorithms

•GreedyGreedy 算法的基本概念算法的基本概念•GreedyGreedy 选择性 选择性 • 优化子结构优化子结构• 与动态规划方法的比较 与动态规划方法的比较 •GreedyGreedy 算法正确性证明方法算法正确性证明方法

Page 4: 第五章 Greedy  Algorithm

4

Optimal

Local Optimal

Page 5: 第五章 Greedy  Algorithm

• GreedyGreedy 算法的基本思想算法的基本思想– 求解最优化问题的算法包含一系列步骤求解最优化问题的算法包含一系列步骤– 每一步都有一组选择每一步都有一组选择– 作出在当前看来最好的选择作出在当前看来最好的选择– 希望通过作出局部优化选择达到全局优化选择希望通过作出局部优化选择达到全局优化选择– GreedyGreedy 算法不一定总产生优化解算法不一定总产生优化解– GreedyGreedy 算法是否产生优化解,需严格证明算法是否产生优化解,需严格证明

• GreedyGreedy 算法产生优化解的条件算法产生优化解的条件– Greedy-choice-propertyGreedy-choice-property– Optimal substructureOptimal substructure

GreedyGreedy 算法的基本算法的基本概念概念

Page 6: 第五章 Greedy  Algorithm

Greedy 选择性

• GreedyGreedy 选择性选择性 若一个优化问题的全局优化解可以通过 若一个优化问题的全局优化解可以通过 局部优化选择得到,则该问题称为具有 局部优化选择得到,则该问题称为具有 GreedyGreedy 选择性选择性 ..

• 一个问题是否具有一个问题是否具有 GreedyGreedy 选择性需选择性需证明证明

Page 7: 第五章 Greedy  Algorithm

   若一个优化问题的优化解包含它的 若一个优化问题的优化解包含它的 子问题的优化解,则称其具有优化子问题的优化解,则称其具有优化 子结构子结构

优化子结构

Page 8: 第五章 Greedy  Algorithm

与动态规划方法的比较

• 动态规划方法可用的条件动态规划方法可用的条件– 优化子结构优化子结构– 子问题重叠性子问题重叠性– 子问题空间小子问题空间小

• GreedyGreedy 方法可用的条件方法可用的条件– 优化子结构优化子结构– GreedyGreedy 选择性选择性

• 可用可用 GreedyGreedy 方法时,动态规划方法可能不适用方法时,动态规划方法可能不适用• 可用动态规划方法时,可用动态规划方法时, GreedyGreedy 方法可能不适用方法可能不适用

Page 9: 第五章 Greedy  Algorithm

• 证明算法所求解的问题具有优化子结构证明算法所求解的问题具有优化子结构• 证明算法所求解的问题具有证明算法所求解的问题具有 GreedyGreedy 选选

择性择性• 证明算法确实按照证明算法确实按照 GreedyGreedy 选择性进行选择性进行

局部优化选择局部优化选择

Greedy 算法正确性证明方法

Page 10: 第五章 Greedy  Algorithm

5.2 5.2 An activity-An activity-selection problemselection problem问题的定义问题的定义优化解的结构分析优化解的结构分析算法设计算法设计算法复杂性 算法复杂性 算法正确性证明算法正确性证明

Page 11: 第五章 Greedy  Algorithm

问题的定义• 活动活动• 设设 S={1,2,…,n}S={1,2,…,n}是是 nn 个活动的集合,各个活动个活动的集合,各个活动使 使 用同一个资源,资源在同一时间只能为一个用同一个资源,资源在同一时间只能为一个活动使用活动使用• 每个活动每个活动 ii 有起始时间有起始时间 ssii ,,终止时间终止时间 ffii ,, ssii

ffii

相容活动相容活动 活动活动 ii和和 jj 是相容的,若是相容的,若 ssjjffii 或或 ssiiffjj ,,即即

SSii ffii SSjj ffjjSSjj ffjj SSii ffii

SSii SSjj ffii ffjj

Page 12: 第五章 Greedy  Algorithm

•问题定义问题定义– 输入输入:: S={1, 2, …, n}S={1, 2, …, n},, FF={ [={ [ssii,, ffii] }] },, nnii11

–输出输出:: SS 的最大相容集合 的最大相容集合 贪心思想 : 为了选择最多的相容活动,每次选 fi 最小的活动,使我们能够选更多的活动

Page 13: 第五章 Greedy  Algorithm

引理引理 1 1 设设 S={1,2,…,n}S={1,2,…,n}是是 nn 个活动集合,个活动集合, [[ssii,, ffi i ]] 是活动是活动 的起始终止时间,且的起始终止时间,且 ff11ff22….….ffnn,, SS 的活动选的活动选 择问题的某个优化解包括活动择问题的某个优化解包括活动 11..

证证 设设 AA 是一个优化解,按结束时间排序是一个优化解,按结束时间排序 AA 中活动,中活动, 设其第一个活动为设其第一个活动为 kk ,,第二个活动为第二个活动为 jj..

如果如果 k=1k=1 ,,引理成立引理成立 ..

如果如果 kk11 ,,令令 B=A-{k} {1}, ∪B=A-{k} {1}, ∪

由于由于 AA 中活动相容,中活动相容, ff11ffk k ssj j , B, B 中活动相容中活动相容 ..

因为因为 BB==AA,, 所以所以 BB 是一个优化解,且包括活动是一个优化解,且包括活动 11..

优化解结构分析

Page 14: 第五章 Greedy  Algorithm

引理引理 2.2.设设 S={1, 2, …, n}S={1, 2, …, n}是是 nn 个活动集合,个活动集合, [[ssii,, ffii]] 是活动是活动 i i

的起始终止时间,且的起始终止时间,且 ff11ff22….….ffnn ,,设设 AA是是 SS 的调的调 度问题的一个优化解且包括活动度问题的一个优化解且包括活动 11 ,则,则 AA=A-{1} =A-{1}

是是 SS={i={iS|sS|siiff11}} 的调度问题的优化解的调度问题的优化解 .. 证证 .. 显然,显然, A’A’ 中的活动是相容的中的活动是相容的 .. 我们仅需要证明我们仅需要证明 AA 是最大的是最大的 .. 设不然,存在一个设不然,存在一个 S’S’ 的活动选择问题的优化解的活动选择问题的优化解 B’B’,, B’B’>>A’A’.. 令令 B={1}B={1}∪∪B’B’. . 对于对于 iiS’, sS’, si i ff11, B, B 中活动相容中活动相容 .. BB是是 SS 的一个解的一个解 . .

由于由于 ||AA|=||=|A’A’||+1+1, , BB==B’B’+1+1>>A’A’+1+1==AA ,,与与 AA 最最 大矛盾大矛盾 . .

引理 2 说明活动选择问题具有优化子结构

Page 15: 第五章 Greedy  Algorithm

• GreedyGreedy 选择性选择性引理引理 3.3. 设 设 S={1, 2, …., n} S={1, 2, …., n} 是 是 n n 个活动集合,个活动集合, ff00=0=0, , lli i 是是 SSi i =={ { jjS | sS | sj j ffi-1i-1}} 中具有最小结束时间 中具有最小结束时间 fflli i

的活的活

动动 .. 设设 AA是是 SS 的包含活动的包含活动 11 的优化解的优化解 , , 其中 其中 ff11 …… ffnn ,,则则 AA= =

证证 .. 对对 AA 作归纳法作归纳法 .. 当当 AA==11时时 , , 由引理由引理 11 ,命题成立,命题成立 ..

设设 AA<<kk 时,命题成立时,命题成立 . .

当当 AA==kk 时时 ,, 由引理由引理 22,, A={1} A∪A={1} A∪ 11,,

AA11是是 SS2 2 = { j= { jS | sS | sj j ff1 1 } } 的优化解的优化解 ..

由归纳假设,由归纳假设, AA11= . = . 于是于是 ,, AA= .= .

k

iil

1}{

k

i il2}{

k

iil

1}{

Page 16: 第五章 Greedy  Algorithm

•贪心思想贪心思想 为了选择最多的相容活动,每为了选择最多的相容活动,每

次选次选 ffii 最小的活动,使我们能够最小的活动,使我们能够选更多的活动选更多的活动

算法的设计算法的设计

Page 17: 第五章 Greedy  Algorithm

• 算法算法 ((设设 ff11ff22….….ffnn 已排序)已排序)

Greedy-Activity-Selector(Greedy-Activity-Selector(S, FS, F)) nnlenyth(S);lenyth(S); AA{1}{1} jj11 For For ii22 To To nn Do Do

If If ssi i f fjj

Then Then AAAA {∪{∪ ii}};; jjii;; Return Return AA

Page 18: 第五章 Greedy  Algorithm

• 如果结束时间已排序如果结束时间已排序 T(n)=T(n)=(n)(n)• 如果 结束时间未排序 如果 结束时间未排序 T(n)=T(n)=(n)+(n)+(nlogn)=(nlogn)=(nlogn)(nlogn)

复杂性设计复杂性设计

Page 19: 第五章 Greedy  Algorithm

• 需要证明需要证明–活动选择问题具有活动选择问题具有 GreedyGreedy 选择性选择性–活动选择问题具有优化子结构活动选择问题具有优化子结构–算法按照算法按照 GreedyGreedy 选择性计算解选择性计算解

算法正确性证明

Page 20: 第五章 Greedy  Algorithm

定理定理 .. Greedy-Activity-SelectorGreedy-Activity-Selector 算法能够产算法能够产 生最优解生最优解 ..

证证 .. Greedy-Activity-SelectorGreedy-Activity-Selector 算法按照引算法按照引 理理 33的的 GreedyGreedy 选择性进行局部优化选选择性进行局部优化选 择择 . .

Page 21: 第五章 Greedy  Algorithm

5.3 5.3 Huffman codesHuffman codes

问题的定义问题的定义优化解的结构分析优化解的结构分析算法设计算法设计算法复杂性分析算法复杂性分析 算法正确性证明算法正确性证明

Page 22: 第五章 Greedy  Algorithm

• 二进制字符编码二进制字符编码– 每个字符用一个二进制每个字符用一个二进制 00 、、 11 串来表示串来表示 ..

• 固定长编码固定长编码– 每个字符都用相同长的每个字符都用相同长的 00 、、 11 串表示串表示 ..

• 可变长编码可变长编码– 经常出现的字符用短码,不经常出现的用长码经常出现的字符用短码,不经常出现的用长码

• 前缀编码前缀编码– 无任何字符的编码是另一个字符编码的前缀无任何字符的编码是另一个字符编码的前缀

问题的定义问题的定义

Page 23: 第五章 Greedy  Algorithm

•编码编码树树

叶结点叶结点 :: 用字符用字符及其出现频率标记及其出现频率标记

内结点内结点 :: 用用其子树的叶结其子树的叶结点的频率和标点的频率和标

记记

边标记边标记 :: 左边标左边标记记 00 ,右侧边标记,右侧边标记

11100100

a: 45a: 45 5555

30302525

c: 12c: 12 b: 13b: 13 1414 d: 16d: 16

e: 9e: 9f: 5f: 5

00

00

00

00

00

11

11

11

1111

Page 24: 第五章 Greedy  Algorithm

• 编码树编码树 TT 的代价的代价–设设 CC 是字母表是字母表 ,,ccCC

– f(c)f(c)是是 cc 在文件中出现的频率在文件中出现的频率– ddTT(c)(c) 是叶子是叶子 cc 在树在树 TT 中的深度,即中的深度,即 cc 的编码长度的编码长度– TT 的代价是编码一个文件的所有字符的代码位数的代价是编码一个文件的所有字符的代码位数 ::

B(T)=B(T)=f c d cT

c C

( ) ( )

Page 25: 第五章 Greedy  Algorithm

• 优化编码树问题优化编码树问题输入输入 : : 字母表 字母表 C = C = {{cc11, c, c22, ...., c, ...., cn n }},,

频率表 频率表 F = F = {{f(cf(c11), f(c), f(c22), ..., f(c), ..., f(cnn))}}

输出输出 : : 具有最小具有最小 B(T)B(T)的的 CC 前缀编码树 前缀编码树 贪心思想贪心思想::

循环地选择具有最低频率的两个结点,循环地选择具有最低频率的两个结点,生成一棵子树,直至形成树生成一棵子树,直至形成树

Page 26: 第五章 Greedy  Algorithm

• 我们需要证明我们需要证明– 优化前缀树问题具有优化子结构优化前缀树问题具有优化子结构– 优化前缀树问题具有优化前缀树问题具有 GreedyGreedy 选择性选择性

优化解的结构分析优化解的结构分析

Page 27: 第五章 Greedy  Algorithm

• 优化子结构优化子结构引理引理 1.1.设设 TT 是字母表是字母表 CC 的优化前缀树,的优化前缀树, ccCC,, f(c)f(c)

是是 cc 在文件中出现的频率在文件中出现的频率 .. 设设 xx、、 yy是是 TT 中任意中任意 两个相邻叶结点,两个相邻叶结点, zz 是它们的父结点,则是它们的父结点,则 zz 作作 为频率是为频率是 f(z)=f(x)+f(y)f(z)=f(x)+f(y) 的字符,的字符, T’=T-{x,y}T’=T-{x,y} 是是 字母表字母表 C’=C-{x,y} {z}∪C’=C-{x,y} {z}∪ 的优化前缀编码树的优化前缀编码树 ..

bb

cc zz

T’T’

00

00 11

11

f(c)f(c)

f(b)f(b)

f(x)+f(y)f(x)+f(y)

bb

cc

xx yy

TT00

00

00 11

11

11

f(x)f(x)

f(c)f(c)

f(y)f(y)

f(b)f(b)

zz

Page 28: 第五章 Greedy  Algorithm

证证 .. 往证往证 B(T)=B(T’)+f(x)+f(y).B(T)=B(T’)+f(x)+f(y).

vvC-{x,y}, dC-{x,y}, dTT(v)=d(v)=d

T’T’(v), f(v)d(v), f(v)dTT(v)=f(v)d(v)=f(v)d

T’T’(v).(v).

由于 由于 ddTT(x)=d(x)=dTT(y)=d(y)=d

T’T’(z)+1,(z)+1,

f(x)df(x)dTT(x)+f(y)d(x)+f(y)d

TT(y)(y)

=(f(x)+f(y))(d=(f(x)+f(y))(dT’T’(z)+1)(z)+1)

=(f(x)+f(y))d=(f(x)+f(y))dT’T’(z)+(f(x)+f(y))(z)+(f(x)+f(y))

由由于于 f(x)+f(y)=f(z)f(x)+f(y)=f(z), , f(x)df(x)dTT(x)+f(y)d(x)+f(y)d

TT(y)=f(z)d(y)=f(z)dT’T’(z)+(f(x)+f(y)).(z)+(f(x)+f(y)).

于是于是 B(T)=B(T’)+f(x)+f(y).B(T)=B(T’)+f(x)+f(y). 若若 T’T’ 不不是是 C’C’ 的优化前缀编码树,的优化前缀编码树, 则必存在则必存在 T’’T’’ ,,使使 B(T’’)<B(T’). B(T’’)<B(T’). 因为因为 zz是是 C’C’ 中字符,它必为中字符,它必为 T’’T’’ 中的叶子中的叶子 . . 把结点把结点 xx与与 yy 加入加入 T’’T’’ ,,作为作为 zz 的子结点,的子结点, 则得到则得到 CC 的一个如下前缀编码树的一个如下前缀编码树 T’’’T’’’ : :

bb

cc zz

T’T’

00

00 11

11

f(c)f(c)

f(b)f(b)

f(x)+f(y)f(x)+f(y)

uu

vv

T’’T’’00

00 11

11

f(v)f(v)

f(u)f(u)

zz f(z)f(z)

Page 29: 第五章 Greedy  Algorithm

T’’’T’’’ 代价为:代价为: B(T’’’)=B(T’’’)= …………+(+(f(x)+f(y))(df(x)+f(y))(dT’’T’’(z)+1)(z)+1)

= = …………+f(z)d+f(z)dT’’T’’(z)+(f(x)+f(y)) (z)+(f(x)+f(y)) (d(dT’’T’’(z)=d(z)=dT’T’(z))(z))

= B(T’’)+f(x)+f(y)<B(T’)+f(x)+f(y)= B(T)= B(T’’)+f(x)+f(y)<B(T’)+f(x)+f(y)= B(T)

与与 TT 是优化的矛盾,故是优化的矛盾,故 T’T’是是 C’C’ 的优化编码树的优化编码树 ..

uu

vv

xx yy

T’’’T’’’00

00

00 11

11

11

f(x)f(x)

f(v)f(v)

f(y)f(y)

f(u)f(u)

zzuu

vv

T’’T’’00

00 11

11

f(v)f(v)

f(u)f(u)

zz f(z)f(z)

Page 30: 第五章 Greedy  Algorithm

• GreedyGreedy 选择性选择性

引理引理 2.2. 设设 CC 是字母表,是字母表, ccCC,, cc 具有频率具有频率 f(c),f(c), xx、、 yy

是是 CC 中具有最小频率的两个字符,则存在一中具有最小频率的两个字符,则存在一 个个 CC 的优化前缀树,的优化前缀树, xx与与 yy 的编码具有相同长的编码具有相同长 度,且仅在最末一位不同度,且仅在最末一位不同 ..

Page 31: 第五章 Greedy  Algorithm

不失一般性,设不失一般性,设 f(b)f(b)f(c), f(x)f(c), f(x)f(y). f(y). 因因 xx与与 yy 是是具有具有最低频率的字符最低频率的字符 ,, f(b) f(b)f(x), f(c)f(x), f(c)f(y)f(y).. 交换交换 TT的的bb和和 xx, , 从从 TT 构造构造 TT ::

证证 : : 设设 TT是是 CC 的优化前缀树,且的优化前缀树,且 bb和和 cc 是具有最大是具有最大深度的深度的 两个兄弟字符两个兄弟字符 ::

xx

yy

bb cc

TT

Page 32: 第五章 Greedy  Algorithm

bb

yy

xx cc

T’T’

交换交换 yy和和 cc构造构造 TT

bb

cc

xx yy

T’’T’’

Page 33: 第五章 Greedy  Algorithm

f c d c f c d cTc C

Tc C

( ) ( ) ( ) ( )'

往证往证 TT 是最优化前缀树是最优化前缀树 .. B(T)-B(TB(T)-B(T))==

= f(x)d= f(x)dTT(x) + f(b)d(x) + f(b)d

TT(b) - f(x)d(b) - f(x)dT’T’(x) - f(b)d(x) - f(b)d

T’T’(b)(b)

= f(x)d= f(x)dTT(x) + f(b)d(x) + f(b)d

TT(b) - f(x)d(b) - f(x)dTT(b) - f(b)d(b) - f(b)d

TT(x)(x)

= (f(b)-f(x))(d= (f(b)-f(x))(dTT(b)-d(b)-d

TT(x)).(x)).

∵ ∵ f(b)f(b)f(x), df(x), dTT(b)(b)ddTT(x) (x) (( 因为因为 bb 的深度最大的深度最大 ))

∴ ∴ B(T)-B(T’)B(T)-B(T’)0, B(T)0, B(T)B(T’)B(T’)

同理可证同理可证 B(T’)B(T’)B(T’’)B(T’’).. 于是于是 B(T)B(T)B(T’’).B(T’’).

由于由于 TT 是最优化的,所以是最优化的,所以 B(T)B(T)B(T’’).B(T’’). 于是于是 , , B(T)=B(T’’)B(T)=B(T’’) ,, T’’T’’是是 CC 的最优化前缀编码树的最优化前缀编码树 . . 在在 T’’T’’ 中中 , , xx和和 yy 具有相同长度编码具有相同长度编码 , , 且仅最后一位不同且仅最后一位不同 ..

Page 34: 第五章 Greedy  Algorithm

• 基本思想基本思想– 循环地选择具有最低频率的两个结点,生成一循环地选择具有最低频率的两个结点,生成一

棵子树,直至形成树棵子树,直至形成树–初始初始 : : f:5, e:9, c:12, b:13, d:16, a:45f:5, e:9, c:12, b:13, d:16, a:45

算法的设计算法的设计

Page 35: 第五章 Greedy  Algorithm

c:12 b:13

f:5 e:9

d:16 a:4514:第一步0 1

c:12 b:13

d:16 a:45

f:5 e:9

14:第二步 250 1 0 1

d:16

a:45:第三步

f:5 e:9

140 1

c:12 b:13

250 1

30 a:45:第四步

c:12 b:13

250 1

d:16

f:5 e:9

140 1

30

550 1

0 1

a:45

:第五步

c:12 b:13

250 1

d:16

f:5 e:9

140 1

30

550 1

0 1

1000 1

Page 36: 第五章 Greedy  Algorithm

• GreedyGreedy 算法算法 (( 使用堆操作实现使用堆操作实现 )) Huffman(Huffman(CC,, FF)) 1.1.        nnCC;;

2.2.        QQCC; ; /* /* 用用 BUILD-HEAPBUILD-HEAP 建立堆建立堆 **//

3.3.        FOR FOR ii11 To To n-1n-1 Do Do 4.4.        zzAllocate-Node( );Allocate-Node( ); 5.5.        xxleft[z]left[z]Extract-MIN(Extract-MIN(QQ); ); /* /* 堆操作堆操作 **// 6.6.        yyright[z]right[z]Extract-MIN(Extract-MIN(QQ); ); /* /* 堆操作堆操作 **// 7.7.        f(z)f(z)f(x)+f(y)f(x)+f(y);; 8.8.        Insert( Insert(Q, zQ, z); ); /* /* 堆操作堆操作 **// 9. Return9. Return

Page 37: 第五章 Greedy  Algorithm

•设设 QQ 由一个堆实现由一个堆实现• 第第 22 步用堆排序的步用堆排序的 BUILD-HEAPBUILD-HEAP 实现实现 : : O(n)O(n)

• 每个堆操作要求每个堆操作要求 O(logn)O(logn) ,,循环循环 n-1n-1次次 : : O(nlogn)O(nlogn)

• T(n)=0(n)+0(nlogn) =0(nlogn)T(n)=0(n)+0(nlogn) =0(nlogn)

复杂性分析复杂性分析

Page 38: 第五章 Greedy  Algorithm

定理定理 .. HuffmanHuffman 算法产生一个优化前缀编码树算法产生一个优化前缀编码树 证证 . . 由 于 引 理由 于 引 理 11 、 引 理、 引 理 22 成 立成 立 ,, 而且而且

HuffmanHuffman 算算 法按照引理法按照引理 22的的 GreedyGreedy 选择性确定的规选择性确定的规 则进行局部优化选择,所以则进行局部优化选择,所以 HuffmanHuffman 算算 法产生一个优化前缀编码树。法产生一个优化前缀编码树。

正确性证明正确性证明

Page 39: 第五章 Greedy  Algorithm

5.4 5.4 Minimal spanning Minimal spanning tree problemtree problem • 问题的定义 问题的定义 • 优化解结构分析优化解结构分析• GreedyGreedy 选择性选择性• KruskalKruskal 算法算法• 算法复杂性算法复杂性• 算法正确性证明算法正确性证明

Page 40: 第五章 Greedy  Algorithm

问题的定义•生成树生成树• 设设 G=(V, E)G=(V, E) 是一个边加权无向连通图是一个边加权无向连通图 . . GG 的的生成 生成 树是无向树树是无向树 S=(V, T),S=(V, T), TTE, E, 以下用以下用 TT 表示表示 SS. . • 如果 如果 W: EW: E{{ 实数实数 }} 是是 GG 的的权函数权函数 , , TT 的权的权值定值定 义为义为 W(T)W(T)==(u,v)(u,v)TTW(u,v)W(u,v). .

• 最小生成树最小生成树 GG 的最小生成树是的最小生成树是 W(T)W(T) 最小的最小的 GG 之生成树之生成树 ..

问题的定义问题的定义输入输入 :: 无向连通图无向连通图 G=(V, E)G=(V, E), , 权函数权函数 WW

输出输出 :: GG 的最小生成树的最小生成树

Page 41: 第五章 Greedy  Algorithm

•实例实例BB

CC

AA

EE DD

7070

6060

80805050

9090

7575

300300

200200

BB

CC

AA

EE DD

7070

5050

9090

300300 BB

CC

AA

EE DD

70708080

5050

300300

BB

CC

AA

EE DD

7070

6060

80805050

Page 42: 第五章 Greedy  Algorithm

•算法思算法思想想

BB

CC

AA

EE DD

7070

6060

80805050

9090

7575

300300

200200

BB

CC

AA

EE DD

7070

6060

80805050

Page 43: 第五章 Greedy  Algorithm

定理定理 1. 1. 设设 TT是是 GG 的最小生成树的最小生成树 . . 如果如果 TT 包含子树包含子树 TT11 和和 TT22, , TT11是是 GG 的子连通图的子连通图 GG11 的生成树,的生成树, TT22是是 GG

的子连通图的子连通图 GG22 的生成树,则的生成树,则 TT11是是 GG11 的最小的最小 生成树,生成树, TT22是是 GG22 的最小生成树的最小生成树 ..

证证 ..

优化解的结构分析优化解的结构分析

uu vv

TT11 TT22

TT

Page 44: 第五章 Greedy  Algorithm

GreedyGreedy 选择性选择性

• 一般算法一般算法• 初始初始 : : AA 为空集合为空集合• 反复扩展边集合反复扩展边集合 A, A, 直至直至 AA 成为最小生成树成为最小生成树

• 循环不变命题循环不变命题•每次循环算法要保持下边循环不变命题为真每次循环算法要保持下边循环不变命题为真““在每次循环前,在每次循环前, AA 必是某个最小生成树的子集”必是某个最小生成树的子集”• 在每次循环中在每次循环中 ,, 如果如果 AA{{((u, vu, v))}} 是是某个最小生成某个最小生成树树 的子集,则称边的子集,则称边 ((u, vu, v)) 是是安全边安全边

Page 45: 第五章 Greedy  Algorithm

• 一般算法的定义一般算法的定义Generic-MST(Generic-MST(G, WG, W))

1. 1. AA==; ; /* /* 不变命题真 不变命题真 **//

2.2. While While AA 不是生成树 不是生成树 Do Do /*/* 不变命题真 不变命题真 **//

3.3. 寻找一个安全边寻找一个安全边 ((u, vu, v););

4.4. AA==AA{ ({ (u, vu, v) }; ) };

5.5. Return Return A A /*/* 不变命题真 不变命题真 **//算法的关键是第三步算法的关键是第三步 , , 寻找安全边寻找安全边 ((u, vu, v))

Page 46: 第五章 Greedy  Algorithm

• 寻找安全边的规则寻找安全边的规则定义定义 1.1. 无向图无向图 G=(V, E)G=(V, E) 的一个的一个划分划分是是 VV 的一个划的一个划

分 分 ((S, V-SS, V-S).).

定义定义 2.2. 如果如果 uuSS, , vvV-SV-S, , 则边则边 ((u, vu, v)) 称为划分称为划分 ((S, S,

V-SV-S))

的的交叉边交叉边 ..

定义定义 3.3. 如果边集合如果边集合 AA 中没有边是划分中没有边是划分 ((S, V-SS, V-S)) 的交的交 叉边叉边 , , 则称划分则称划分 ((S, V-SS, V-S))尊重尊重 AA..

定义定义 4.4. 划分划分 ((S, V-SS, V-S)) 的交叉边的交叉边 ((u, vu, v)) 称为称为轻边轻边 , , 如如果在 果在

所有所有 ((S, V-SS, V-S)) 的交叉边中的交叉边中 , , ((u, vu, v)) 的权值最小的权值最小 ..

定义定义 5.5. 边边 ((u, vu, v)) 是是满足某性质的轻边满足某性质的轻边 , , 如果在满足如果在满足该性该性

质的边中质的边中 , (, (u, vu, v)) 的权值最小的权值最小 ..

Page 47: 第五章 Greedy  Algorithm

• 示例示例dd

ee

ffgg

cc

ii

hh

aa

bb

SS

V-SV-S

7788

111188

1414

• 红结点集合是红结点集合是 SS• 浅蓝结点集合是浅蓝结点集合是 V-SV-S• 蓝边是交叉边蓝边是交叉边 , , 权为权为 77 的边是轻的边是轻边边• 红边集合是受尊重的边集合红边集合是受尊重的边集合

Page 48: 第五章 Greedy  Algorithm

定理定理 11.. 设设 GG=(=(V, EV, E)) 是具有边加权函数是具有边加权函数 WW 的无向连通的无向连通图图 , ,

AAEE 是包含在是包含在 GG 的某个最小生成树中的边集的某个最小生成树中的边集合合 , ,

((S,V-SS,V-S))是是 GG 的尊重的尊重 AA 的任意划分的任意划分 , (, (u,vu,v))是是((S,V-SS,V-S))

的交叉的交叉轻轻边边 , , 则则 ((u, vu, v))对对 AA 是安全的是安全的 ..

证证 . . 令令 TT 是包含是包含 AA 的最小生成树的最小生成树 ..

如果如果 ((u, vu, v))属于属于 TT, , 则则 ((u, vu, v))对对 AA 是安全是安全的的 ..

设设 ((u, vu, v)) 不属于不属于 TT. . 我们构造一个我们构造一个 GG 的最小的最小生成树 生成树

T’T’, , 使其包含使其包含 AA{({(u, vu, v)}, )}, 从而证明从而证明 ((u, vu, v))安安全全 . .

Page 49: 第五章 Greedy  Algorithm

由于由于 uu和和 vv 在划分在划分 ((S, V-SS, V-S) ) 的两边的两边 , , TT 至少存在一条交叉边在至少存在一条交叉边在 pp中中 , , 设为设为((x, yx, y). ). 由于划分尊重由于划分尊重 AA, (, (x, yx, y)) 不在不在 AA中中 . . 删删除 除 pp 中的中的 (x, y), (x, y), 增加增加 ((u, vu, v), ), 得到得到

T’T’==T T - {(- {(x, yx, y)} )} {({(u, vu, v)}.)}.往证往证 T’T’ 是最小生成树是最小生成树 ..因为因为 ((u, vu, v)) 是轻交叉边是轻交叉边 , (, (x, yx, y)) 是交叉是交叉边边 , , WW((u, vu, v))WW((x, yx, y). ). WW((T’T’)=)=WW((TT)-)-WW((x,yx,y)+)+WW((u,vu,v))WW((TT)) 由于由于 TT 是最小生成树是最小生成树 , , WW((T’T’)=)=WW((TT).). T’T’ 是最小生成树是最小生成树 , A, A{ ({ (u,vu,v) }) }T’T’, , ((u, vu, v)) 对于对于 AA 是安全的是安全的 ..

• S=S=黄结点集合黄结点集合• V-S=V-S= 浅蓝结点集合浅蓝结点集合• A=A=红边集合红边集合

yy

xx

uu

v

TT

pp yy

xx

uu

v

T’T’

pp

Page 50: 第五章 Greedy  Algorithm

Kruskal 算法

MST-Kruskal(MST-Kruskal(G,WG,W))1. A=1. A=;;2. For 2. For vvV[G]V[G] Do Do3.3. Make-Set(Make-Set(vv); /* ); /* 4.4. 按照按照 WW值的递增顺序排序值的递增顺序排序 E[G]E[G];;5.5. For For (u, v)(u, v)E[G] E[G] ((按按 WW值的递增顺序值的递增顺序 ) Do) Do6.6. If Find-Set(If Find-Set(uu))Find-Set(Find-Set(vv))7.7. Then A=AThen A=A{(u, v)}; Union({(u, v)}; Union(u, vu, v););8.8. Return Return AA

Page 51: 第五章 Greedy  Algorithm

算法复杂性

• 令令 n=|V|, m=|E|n=|V|, m=|E|• 第第 44 步需要时间步需要时间 : : O(mO(mloglogm)m)• 第第 2-32-3 步执行步执行 O(n)O(n)个个 Make-SetMake-Set 操作操作 第第 5-85-8 步执行步执行 (n))(n))个个 Find-SetFind-Set和和 UnionUnion

操作操作 每个每个 Find-SetFind-Set和和 UnionUnion 操作操作 O(n)O(n)• mmn-1(n-1( 因为因为 GG 连通连通 ), ),

(n)=O((n)=O(loglogn)=O(n)=O(loglogm)m)• 总时间复杂性总时间复杂性:: O(mO(mloglogm)m)

Page 52: 第五章 Greedy  Algorithm

算法正确性

定理定理 2.2. MST-Kruskal(MST-Kruskal(G,WG,W)) 算法能够产生算法能够产生图图

GG 的最小生成树的最小生成树 ..

证证 .. 因为算法按照因为算法按照 GreedyGreedy 选择性进行选择性进行局局

部优化选择部优化选择 ..