首页 > 代码库 > 第三次作业
第三次作业
2.利用程序huff_enc和huff_dec进行以下操作(在每种情下,利用由被压缩生成的码本)。
(a)对Sena、Sensin和Omaha图像进行编码。
解:用表格的形式给出对应文件压缩前后的大小为(单位用字节表示)
图像名称 | 压缩前 | 压缩后 | 压缩率 |
Sena | 64kb | 56.1kb | 0.88 |
Sensin | 64kb | 60.2kb | 0.94 |
Omaha | 64kb | 57.0kb | 0.89 |
4. 一个信源从符号集A={a1, a2, a3, a4, a5}中选择字母,概率为P(a1)=0.15,P(a2)=0.04,P(a3)=0.26,P(a4)=0.05,P(a5)=0.50。
(a)计算这个信源的熵。
(b) 这个信源的霍夫曼码为:
(c)求(b)中代码的平均长度及其冗余度。
解:
(a)计算这个信源的熵。
解:H=-P(a1)*log2* P(a1)- P(a2)*log2* P(a2)-P(a3)*log2* P(a3)-P(a4)*log2* P(a4)-P(a5)*log2* P(a5)
=-0.15* log2*0.15-0.04* log2*0.04-0.26* log2*0.26-0.05* log2*0.05-0.50* log2*0.50
=0.55 bits
(b)求这个信源的霍夫曼码。
解:A={a1, a2, a3, a4, a5}
={110,1111,10,1110,0}
(c)求(b)中代码的平均长度及其冗余度。
解:
平均码长:L=0.15*3+0.04*4+0.26*2+0.05*4+0.50*1
=1.83 bits/symbol
冗余度: L-H=1.282bits/symbol
2、 思考:为什么压缩领域中的编码方法总和二叉树联系在一起呢?
答:为了使用不固定的码长表示单个字符,编码必须符合―前缀编码‖的要求,即较短的编码决不能是较长编码的前缀。要构造符合这一要求的二进制编码体系,二叉树是最理想的选择。
举例如下:
要编码的字符总是出现在树叶上,假定从根向树叶行走的过程中,左转为0,右转为
1,则一个字符的编码就是从根走到该字符所在树叶的路径。正因为字符只能出现在
树叶上,任何一个字符的路径都不会是另一字符路径的前缀路径,符合要求的前缀
编码也就构造成功了:
根(root)
0 │ 1
┌──┴───┐
0 │ 1 0 │ 1
┌──┴──┐ ┌─┴──┐
│ │ │ │
a │ d e
0 │ 1
┌──┴──┐
│ │
b c
a :00
b : 010
c :011
d :10
e :11
第三次作业