哈夫曼编码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

17
11
e 10 0.32 e 100 0.32
01 0 1
f 11111 0.03 f 101 0.03 g 01 0.21 g 110 0.21
7 10 6 5 a h d0 1
h 1101 0.10 h 111 0.10
2 3f c
Huffman码的WPL=2(0.19+0.32+0.21) + 4(0.07+0.06+0.10) +5(0.02+0.03)
解:先将概率放大100倍,以方便构造哈夫曼树。 权值集合 w={7, 19, 2, 6, 32, 3, 21, 10}, 按哈夫曼树构造规则(合并、删除、替换),可得到哈夫曼树。
7
为清晰起见,重新排序为:
w=×{2,×3, 6, 7, 10, 19, 21, 32}
w1=×{5×, 6, 7, 10, 19, 21, 32}
Huffman树及其应用 a
一、最优二叉树(霍夫曼树)
b
c
预备知识:若干术语
d
路 径: 由一结点到另一结点间的分支所构成
ef g
路径长度: 路径上的分支数目 a→e的路径长度= 2
树的路径长度:从树根到每一结点的路径长度之和。树长度=10
带权路径长度:结点到根的路径长度与结点上权的乘积
树的带权路径长度:树中所有叶子结点的带权路径长度之和
字符 空格 a
b
c
d
e
f
g
h
i
频度 186 64 13 22 32 103 21 15 47 57
字符 j 频度 1
k l mn o p q r s 5 32 20 57 63 15 1 48 51
字符 t u v w x y z
频度 80 23 8 18 1 16 1
11
提示1:霍夫曼树中各结点的结构可以定义为如下 5个分量: char weight parent lchild Rchild
(2) 重复以下步骤, 直到 F 中仅剩下一棵树为止:
① 在 F 中选取两棵根结点的权值最小的扩充二叉树, 做为左、 右子树构造一棵新的二叉树。置新的二叉树的根结点的权值为 其左、右子树上根结点的权值之和。
② 在 F 中删去这两棵二叉树。 ③ 把新的二叉树加入 F。
先举例!
3
例1:设有4个字符d,i,a,n,出现的频度分别为7,5,2, 4,
霍 夫 曼 树: 带权路径长度最小的树。
1
Huffman树简介:
Weighted Path Lengthn
树的带权路径长度如何计算? WPL 哈夫曼树则是:WPL 最小的树。
=k=1 wklk
经典之例:
75 2 4 a bc d
(a)
WPL=36
2 c 4 d 75 ab (b)
WPL=46
Huffman树 7 a
100
w2=×{7, ×10, 11, 19, 21, 32}
w3=×{11,×17, 19, 21, 32}
40
60
w4=×{19,×21, 28, 32}
w5=×{28×,32,40}
19 21 32 28 b ge
w6=×{40×,60}
17
11
w7={100}
哈夫曼树
7 10 6 5 a hd
提示2:霍夫曼树的存储结构可采用顺序存储结构: 将整个霍夫曼树的结点存储在一个数组中:HT[1..n]; 将结点的编码存储在HC[1..n]中。
提示3:霍夫曼树如何构造?构造好之后又如何求得 各结点对应的霍夫曼编码?
12
应用:压缩程序
少。这种编码已广泛应用于网络通信中。
例2:假设用于通信的电文仅由8个字母 {a, b, c, d, e, f, g, h}
构成,它们在电文中出现的概率分别为{ 0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10},试为这8个字母设计哈夫曼编 码。如果用0~7的二进制编码方案又如何?
怎样编码才能使它们组成的报文在网络中传得最快? 法1:等长编码。例如用二进制编码来实现。
取 d=00,i=01,a=10,n=11 法2:不等长编码,例如用哈夫曼编码来实现。
取 d=0; i=10, a=110, n=111
最快的编码是哪个?是非等长的Huffman码! 怎样实现Huffman编码先?要构造Huffman树!
01 d
01
i 01
a
n
Huffman编码结果:d=0, i=10, a=110, n=111 特点W:PL每=一1b码it都×不7+是2另bi一t×码5的+3前b缀it(,2+绝4不)=会35错译! 称为前缀码
6
霍夫曼编码的基本思想是:概率大的字符用短码,概率小的用
长码。由于霍夫曼树的WPL最小,说明编码所需要的比特数最
=1.44+0.92+0.25=2.61
二进制码 WPL=3(0.19+0.32+0.21+0.07+0.06+0.10+0.02+0.03)=3
9
另一种结果表示:
Βιβλιοθήκη Baidu10
例3:设字符集为26个英文字母,其出现频度如下表 所示。
要求编程实现:
先建哈夫曼树,再利用此树对报文“This program is my favorite”进行编码和译码。
2 3f c
8
对应的哈夫曼编码(左0右1): 100
符 编码 频率 符 编码 频率
0 40
1 60
a 1100 0.07 a 000 0.07 0 1
01
b 00 0.19 b 001 0.19 19 21 32 28
c 11110 0.02 c 010 0.02 b
g e0
1
d 1110 0.06 d 011 0.06
5 b
24 cd
(c)
WPL= 35
2
构造霍夫曼树的基本思想:
权值大的结点用短路径,权值小的结点用长路径。
构造Huffman树的步骤(即Huffman算法):
(1) 由给定的 n 个权值{w0, w1, w2, …, wn-1},构造具有 n 棵扩充 二叉树的森林F = { T0, T1, T2, …, Tn-1 },其中每一棵扩充二叉树 Ti 只有一个带有权值 wi 的根结点,其左、右子树均为空。
4
构造Huffman树的步骤:
操作要点1:对权值的合并、删除与替换
——在权值集合{7,5,2,4}中,总是合并当前值最小的两个权
注:方框表示外结点(叶子,字符对应的权值), 圆框表示内结点(合并后的权值)。
5
操作要点2:按左0右1对Huffman树的所有分支编
号! ——将 Huffman树 与 Huffman编码 挂钩
相关文档
最新文档