Huffman编码树

Huffman编码是一种可变长编码方式,是由美国数学家David Huffman创立的,是二叉树的一种特殊转化形式。编码的思想是:将使用次数多的代码转换成长度较短的码字(一般是0-1比特型的码字),而使用次数少的可以使用较长的码字,并且保持编码的唯一可解性。

Huffman编码已应用于多个重要的数据压缩领域,而数据压缩技术的理论基础是信息论。根据信息论的原理,可以找到最佳数据压缩编码方法,数据压缩的理论极限是信息熵。如果要求在编码过程中不丢失信息量,即要求保存信息熵,这种信息保持编码又叫做熵保存编码,或者叫熵编码。从信息论的角度来看,Huffman编码是一种熵编码。

Huffman算法的最根本的原则是:Huffman树的带权路径长最小。所谓树的带权路径长度记为WPL = W1*L1+W2*L2+W3*L3+...+Wn*Ln, n表示Huffman二叉树的叶节点的个数。Wi(i=1,2,...,n)表示n个权值,Li(i=1,2,...,n)表示n个叶节点的层数,或称为路径长度。

对n个信源信息符号进行Huffman编码的具体步骤归纳如下:

1.概率统计,得到n个符号的不同概率;

2. 将n个信源信息符号的n个概率,按概率从小到大排序;

3. 将n个概率中,最后两个小概率相加,这时概率值个数减为n-1个;

4. 将n-1个概率,按大小重新排序;

5. 重复3将新排序后的最后两个小概率再相加,相加和与其余概率再排序;

6. 如此反复重复n-2次,得到只剩两个概率序列;

7. 以二进制码元(0-1)赋值,构成哈夫曼码字,编码结束。

下面举例来进一步解释Huffman编码步骤1~6的过程,信源信息符a1,a2,a3,a4,a5,a6,a7,其统计概率为:

P(a1)=0.2,P(a2)=0.19,P(a3)=0.18,

P(a4)=0.17,P(a5)=0.15,P(a6)=0.1,P(a7)=0.01。

对信源信息符进行Huffman编码过程:

1.按照信息符的概率值,进行由小到大排序,排序后结果为:

 

 

 

2.将a7和a6组合成一个中间节点,用两者概率值之和标注该中间节点,并用该中间节点代替a7和a6,重新排序后结果为:


 

 

可以发现,中间节点的概率值虽然a7和a6两者之和,但是其值依然是最小的,不需要进行顺序的调整。

    3.继续将节点0.11和a5组合成中间节点,用0.11和a5的概率值之和标注该节点,重新排序后结果为:

 

 

 

此时中间节点的概率值大于其它任一节点的概率值,需要进行顺序调整。

4.将a4和a3组合成中间节点,调整顺序,结果为:

 

 

 

    5.将a2和a1组合成中间节点,调整循序,结果为:

 

 

 

6.将中间节点0.26和0.35组合,调整顺序后结果为:

 

 

 

7.最终将节点0.39和0.61组合,得到Huffman树:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值