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 树树树树
Jan 03, 2016
n
iiilw
1
树的带权路径长度 ((Weighted Path Length, Weighted Path Length, WPL)WPL)
• 所有叶子结点的带权路径长度之和为树的带权路径长度,记为:
wpl=
• 其中:– n 为叶子结点数目,– wi 为第 i 个叶子结点的权值,– li 为第 i 个叶子结点的路径长度。
9.5.3 哈夫曼树
举例 : 有 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
带权路径长度达到最小带权路径长度达到最小
二、构造哈夫曼树1.哈夫曼树的定义
设有 n 个带权的叶子结点,想构造一棵二叉树,使WPL( 带权路径长度 ) 为最小,该树称为最优二叉树,也称为哈夫曼树 (Huffman tree) 。 特点:特点:
权值大的叶子离根最近;权值大的叶子离根最近;只有只有 00 度和度和 22 度结点度结点若叶子有若叶子有 nn 个,则:个,则:
总结点数总结点数 =2n-1=2n-1
a
b
c d
7
5
2 4
2.哈夫曼树的构造假设有 n 个权值,则构造出的哈夫曼树有 n 个叶子结点。 n个权值分别设为 w1,w2,…,wn ,则 Huffman 树的构造算法:
(1) 将 w1,w2,…,wn 看成是有 n 棵(仅有根结点的)二叉树的森林;(2) 在森林中选出两个根的权值最小的和次小的二叉树,作为新二叉树的左、右子树,且新二叉树的根权值为其左、右子树根权值之和;约定:权值小者为左子树,权值大者为右子树(3) 从森林中删除选取的两棵二叉树,并将新二叉树加入森林;(4) 重复 (2) 、 (3) 步,直到森林中只剩一棵二叉树为止,该树即为所求的哈夫曼树。
举例:已知叶子结点 {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}
在远程通讯中,要将待传字符转换成由二进制组成的字符串: 设要传送的字符为: ABACCDA 若编码为: A—00 B—01
C—10 D---11
若将编码设计为长度不等的二进制编码,即让待传字符串中出现次数较多的字符采用尽可能短的编码,则转换的二进制字符串便可能减少。
00010010101100
三、哈夫曼编码——哈夫曼树的应用
设要传送的字符为: ABACCDA
若编码为: A—0
B—00
C—1
D---01
关键:要设计长度不等的编码,则必须使任一字符的编码都不是另一个字符的编码的前缀。这种编码称作前缀编码。
ABACCDA
000011010但: 0000
AAAA ABA BB重码
设要传送的字符为: ABACCDA
若编码为 : A—0
B—110
C—10
D---111
0110010101110
采用 Huffman树设计二进制前
缀编码
规定:左分支用“ 0” 表
示右分支用“ 1” 表
示
A
C
B D
0
0
0
1
1
1
译码过程:分解接收字符串:遇“ 0” 向左,遇“ 1” 向右;一旦到达叶子结点,则译出一个字符,反复由根出发,直到译码完成。 0110010101110
A
C
B D
0
0
0
1
1
1
ABACCDA
例:已知某系统在通讯时,只出现 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}
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
• 作业 P234/9.11