霍夫曼编码的matlab实现
一、实验内容:
用Matlab语言编程实现霍夫曼(Huffman)编码。
二、实验原理及编码步骤:
霍夫曼(Huffman)编码算法是满足前缀条件的平均二进制码长最短的编-源输出符号,而将较短的编码码字分配给较大概率的信源输出。
算法是:在信源符号集合中,首先将两个最小概率的信源输出合并为新的输出,其概率是两个相应输出符号概率之和。
这一过程重复下去,直到只剩下一个合并输出为止,这个最后的合并输出符号的概率为1。
这样就得到了一张树图,从树根开始,将编码符号1 和0 分配在同一节点的任意两分支上,这一分配过程重复直到树叶。
从树根到树叶途经支路上的编码最后就构成了一组异前置码,就是霍夫曼编码输出。
以本教材P74例题3-18信源为例:
信源:
X x1 x2 x3 x4 x5
q(X) = 0.4 0.2 0.2 0.1 0.1
解:
通过上表的对信源缩减合并过程,从而完成了对信源的霍夫曼编码。
特点:霍夫曼编码在三种编码方法中编码效率最高 基本步骤:p72
三、实验程序及运行结果 (见附录6)
程序流程图:XXXXXXXXXXXX 四 分析结果
由程序运行结果可知: 方法一(概率之和往上排): 码字:11 01 00 101 100 编码效率:
%4.962
.212
.21log 2
.22.038.0212
.2)(log )
(log )(log n 5
11≈=
==⨯+⨯==-=
=
∑ηη所以:)
(D n X H D
n xm q xm q D X H
码长均值:2.22.038.02n 1=⨯+⨯=
码长均方差:{}16.02.0)2.23(8.0)2.22()2221=⨯-+⨯-=-n n E ( 方法二(概率之和往下排): 码字:0 10 111 1101 1100 编码效率:
%4.962
.212
.21log 2.22.042.032.024.0112.2)(log )
(log )(log n 5
12≈=
==⨯+⨯+⨯+⨯==-=
=∑ηη所以:)
(D n X H D
n xm q xm q D X H
码长均值:2.22.042.032.024.01n 2=⨯+⨯+⨯+⨯= 码长均方差:
{
}36
.12.02.2-42.02.2-32.0)2.22(4.0)2.21()2
2222
22=⨯+⨯+⨯-+⨯-=-)()((n n E
比较方法一和方法二可知:两张编码方法平均码长相等,但方法二均方差较大,一般取均方
差小的编码方法,这样译码会更简单。