12
n i i i l w 1 树树树树树树树树 ( ( Weighted Path Length, WPL) Weighted Path Length, WPL) 树树树树树树树树树树树树树树树树树树树树树树树树 树树树 ,: wpl= 树树n 树树树树树树树w i 树树 i 树树树树树树树树l i 树树 i 树树树树树树树树树树9.5.3 树树树树

树的带权路径长度 ( Weighted Path Length, WPL) 所有 叶子 结点的带权路径长度之和为 树的带权路径长度 ,记为: wpl= 其中: n 为叶子结点数目,

Embed Size (px)

DESCRIPTION

9.5.3 哈夫曼树. 树的带权路径长度 ( Weighted Path Length, WPL) 所有 叶子 结点的带权路径长度之和为 树的带权路径长度 ,记为: wpl= 其中: n 为叶子结点数目, w i 为第 i 个叶子结点的权值, l i 为第 i 个叶子结点的路径长度。. a. b. c. d. 7. 5. 2. 4. c. 2. 7. a. 4. d. 5. b. a. b. 2. 4. c. d. 7. 5. 举例 : - PowerPoint PPT Presentation

Citation preview

Page 1: 树的带权路径长度 ( Weighted Path Length, WPL) 所有 叶子 结点的带权路径长度之和为 树的带权路径长度 ,记为: wpl= 其中: n 为叶子结点数目,

n

iiilw

1

树的带权路径长度 ((Weighted Path Length, Weighted Path Length, WPL)WPL)

• 所有叶子结点的带权路径长度之和为树的带权路径长度,记为:

wpl=

• 其中:– n 为叶子结点数目,– wi 为第 i 个叶子结点的权值,– li 为第 i 个叶子结点的路径长度。

9.5.3 哈夫曼树

Page 2: 树的带权路径长度 ( Weighted Path Length, WPL) 所有 叶子 结点的带权路径长度之和为 树的带权路径长度 ,记为: wpl= 其中: n 为叶子结点数目,

举例 : 有 4 个结点,权值分别为 7 , 5 , 2 , 4 ,构造有 4 个叶子结点的二叉树

a b c d7 5 2 4WPL=(7+5+2+4)*2=36

d

c

a b

2

4

7 5

WPL=(7+5)*3+2*1+4*2=46

a

b

c d

7

5

2 4

WPL=7*1+5*2+(2+4)*3=35

n

kKKLWWPL

1

带权路径长度达到最小带权路径长度达到最小

Page 3: 树的带权路径长度 ( Weighted Path Length, WPL) 所有 叶子 结点的带权路径长度之和为 树的带权路径长度 ,记为: wpl= 其中: n 为叶子结点数目,

二、构造哈夫曼树1.哈夫曼树的定义

设有 n 个带权的叶子结点,想构造一棵二叉树,使WPL( 带权路径长度 ) 为最小,该树称为最优二叉树,也称为哈夫曼树 (Huffman tree) 。 特点:特点:

权值大的叶子离根最近;权值大的叶子离根最近;只有只有 00 度和度和 22 度结点度结点若叶子有若叶子有 nn 个,则:个,则:

总结点数总结点数 =2n-1=2n-1

a

b

c d

7

5

2 4

Page 4: 树的带权路径长度 ( Weighted Path Length, WPL) 所有 叶子 结点的带权路径长度之和为 树的带权路径长度 ,记为: wpl= 其中: n 为叶子结点数目,

2.哈夫曼树的构造假设有 n 个权值,则构造出的哈夫曼树有 n 个叶子结点。 n个权值分别设为 w1,w2,…,wn ,则 Huffman 树的构造算法:

(1) 将 w1,w2,…,wn 看成是有 n 棵(仅有根结点的)二叉树的森林;(2) 在森林中选出两个根的权值最小的和次小的二叉树,作为新二叉树的左、右子树,且新二叉树的根权值为其左、右子树根权值之和;约定:权值小者为左子树,权值大者为右子树(3) 从森林中删除选取的两棵二叉树,并将新二叉树加入森林;(4) 重复 (2) 、 (3) 步,直到森林中只剩一棵二叉树为止,该树即为所求的哈夫曼树。

Page 5: 树的带权路径长度 ( Weighted Path Length, WPL) 所有 叶子 结点的带权路径长度之和为 树的带权路径长度 ,记为: wpl= 其中: n 为叶子结点数目,

举例:已知叶子结点 {A,B,C,D} 的权值序列为 {1,5,7,

3} ,则构造 Huffman 树过程如下:

1 5 7 3

初始的森林

5 7 4

1 3

1与 3合并

7

4

1 3

5

9

4与 5合并

7

4

1 3

5

9

16

7与 9合并

WPL=7*1+5*2+(1+3)*3=29

Huffman树构建练习:权值序列为{9, 8, 4, 6, 7}

Page 6: 树的带权路径长度 ( Weighted Path Length, WPL) 所有 叶子 结点的带权路径长度之和为 树的带权路径长度 ,记为: wpl= 其中: n 为叶子结点数目,

在远程通讯中,要将待传字符转换成由二进制组成的字符串: 设要传送的字符为: ABACCDA 若编码为: A—00 B—01

C—10 D---11

若将编码设计为长度不等的二进制编码,即让待传字符串中出现次数较多的字符采用尽可能短的编码,则转换的二进制字符串便可能减少。

00010010101100

三、哈夫曼编码——哈夫曼树的应用

Page 7: 树的带权路径长度 ( Weighted Path Length, WPL) 所有 叶子 结点的带权路径长度之和为 树的带权路径长度 ,记为: wpl= 其中: n 为叶子结点数目,

设要传送的字符为: ABACCDA

若编码为: A—0

B—00

C—1

D---01

关键:要设计长度不等的编码,则必须使任一字符的编码都不是另一个字符的编码的前缀。这种编码称作前缀编码。

ABACCDA

000011010但: 0000

AAAA ABA BB重码

Page 8: 树的带权路径长度 ( Weighted Path Length, WPL) 所有 叶子 结点的带权路径长度之和为 树的带权路径长度 ,记为: wpl= 其中: n 为叶子结点数目,

设要传送的字符为: ABACCDA

若编码为 : A—0

B—110

C—10

D---111

0110010101110

采用 Huffman树设计二进制前

缀编码

规定:左分支用“ 0” 表

示右分支用“ 1” 表

A

C

B D

0

0

0

1

1

1

Page 9: 树的带权路径长度 ( Weighted Path Length, WPL) 所有 叶子 结点的带权路径长度之和为 树的带权路径长度 ,记为: wpl= 其中: n 为叶子结点数目,

译码过程:分解接收字符串:遇“ 0” 向左,遇“ 1” 向右;一旦到达叶子结点,则译出一个字符,反复由根出发,直到译码完成。 0110010101110

A

C

B D

0

0

0

1

1

1

ABACCDA

Page 10: 树的带权路径长度 ( Weighted Path Length, WPL) 所有 叶子 结点的带权路径长度之和为 树的带权路径长度 ,记为: wpl= 其中: n 为叶子结点数目,

例:已知某系统在通讯时,只出现 C , A , S , T ,B 五种字符,它们出现的频率依次为 2 , 4 , 2 , 3 ,3 ,试设计 Huffman 编码。

构造的 Huffman 树

14

8

4

6

4

2 2

3 3

T B A

C S

先构建 Huffman 树字符 {C, A, S, T, B} 对应的权值为: {2 , 4 , 2 , 3 ,3}

Page 11: 树的带权路径长度 ( Weighted Path Length, WPL) 所有 叶子 结点的带权路径长度之和为 树的带权路径长度 ,记为: wpl= 其中: n 为叶子结点数目,

14

8

4

6

4

2 2

0

0

0

1

1

13 30 1

T B A

C S

出现频率越大的字符,其 Huffman 编码越短。

由构建的 Huffman 树得出 HUffman 编码: 约定:左分支用“ 0”表示;右分支用“ 1”表示

Huffman 编码为:T—00B —01A —10C —110S —111

Page 12: 树的带权路径长度 ( Weighted Path Length, WPL) 所有 叶子 结点的带权路径长度之和为 树的带权路径长度 ,记为: wpl= 其中: n 为叶子结点数目,

• 作业 P234/9.11