一、 参考书《数据压缩导论(第4版)》 Page 66
2、 利用程序huff_enc和huff_dec进行以下操作(在每种情况下,利用由被压缩图像生成的码本)。
(a) 对Sena、Sensin和Omaha图像进行编码。
答:
| 压缩前 | 压缩后 | 计算 | ||
| 文件名 | 大小 | 文件名 | 大小 | 压缩比 |
| ①SENA.IMG | 64kb | ①sena.huff | 57kb | 89.0625% |
| ②SINAN.IMG | 64kb | ②sinan.huff | 61kb | 95.3125% |
| ③OMAHA.IMG | 64kb | ③omaha.huff | 58kb | 90.625% |
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=-0.15*log20.15-0.04*log20.04-0.26*log20.26-0.05*log20.05-0.50*log20.50
=0.547177bit
(b)求这个信源的霍夫曼码。
答:将A排序得:a5(0.50)>a3(0.26)>a1(0.15)>a4(0.05)>a2(0.04)

(c) 求(b)中代码的平均长度及其冗余度。
答:根据平均码长计算公式L=∑i=1,2,3....np(ai)*l(ai)以及(b)中求出的码长得:
L=p(a1)×l(a1)+p(a2)×l(a2)+p(a3)×l(a3)+p(a4)×l(a4)+p(a5)×l(a5)
=0.15×3+0.04×4+0.26×2+0.05×4+0.50×1
=1.83(bits)
冗余度:r=L-H
H=-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)]
=1.83 - H
3.为什么压缩领域中的编码方法总和二叉树联系在一起呢?
因为在编码中,要使用不固定的码长表示单个字符,编码必须符合“前缀编码”的要求,即较短的编码决不能是较长编码的前缀。要满足这个要求,二叉树是最直观能表现出来的。如二叉树:
根(root)
0 | 1
+------+------+
0 | 1 0 | 1
+-----+-----+ +---+----+
| | | |
a | d e
0 | 1
+-----+-----+
| |
b c
要编码的字符总是出现在树叶上,假定从根向树叶行走的过程中,左转为0,右转为1,则一个字符的编码就是从根走到该字符所在树叶的路径。正因为字符只能出现在树叶上,任何一个字符的路径都不会是另一字符路径的前缀路径,符合要求的前缀编码也就构造成功了:
a - 00 b - 010 c - 011 d - 10 e - 11
浙公网安备 33010602011771号