huffman编码

一.实验原理

1.Huffman编码

1)HuffmanCoding(霍夫曼编码)是一种无失真编码的编码方式,Huffman编码是可编长编码(VLC)的一种。 
2)Huffman编码基于信源的概率统计模型,它的基本思路是:出现概率大的信源符号编短码,出现概率小的编长码。从而实现平均码长最小。 
3)在程序实现中常使用一种叫做树的数据结构实现Huffman编码,由它编出的码是即时码。

2.Huffman编码的方法

2.1统计符号的发生概率; 
2.2
把频率从小到大的顺序排列 
2.3 每一次选出最小的两个值,作为二叉树的两个叶子节点,将和作为它们的根节点,这两个叶子节点不再参与比较,新的根节点参与比较; 
2.4 重复3,知道最后得到和为1的根节点。 
2.5 将形成的二叉树的左节点标为0,右节点标为1,把从最上面的根节点到最下面的叶子节点途中遇到的0,1序列串起来,就得到了各个符号的编码。


huffman编码

二、实验代码分析:

第一步:先看代码中的三个结构体,从结构体可以看数据存储的结构:

Huffman节点:


huffman编码

huffman编码

第一次扫描文件,得到256个符号对应的频率,并创建256个树叶节点



huffman编码

根据得到的符号频率生成一棵霍夫曼树,从树叶->根,并根据生成的树从根到树叶采用深度优先的遍历方法得到每个符号对应的码字



huffman编码

huffman编码

huffman编码

将生成的码表写到输出文件中



huffman编码

再次扫描文件,将每个符号对应的码字写入到输出文件中



huffman编码

三、实验结果分析:



.Xls



huffman编码

.jpg

huffman编码

.ppt



huffman编码

十个文件的分析


huffman编码

       通过该实验,可以验证霍夫曼编码的编码效率是比较高的,编码后的平均码长与香农定理中给出的变长编码码长的下界很接近了。也可以看出熵编码对于概率分布不均的信源其压缩效果更好,因此在实际操作中应尽量信源转换为概率分布不均的模型后再对其进行熵编码。除了验证了霍夫曼编码的效率外,还通过该实验了解了数据结构和数据的存储方式等相关的知识。