一、实验原理
1 熵,又称为“信息熵” (Entropy)
1.1 在信息论中,熵是信息的度量单位。信息论的创始人 Shannon 在其著作《通信的 数学理论》中提出了建立在 概率统计模型上的信息度量。他把信息定义为“用来 消除不确定性的东西”。
1.2 一般用符号 H 表示,单位是比特。对于任意一个随机变量 X,它的熵定义如下:
1.3 变量的不确定性越大,熵也就越大。换句话说,了解它所需要的信息量也就越大。
2 Huffman 编码
2.1 Huffman Coding (霍夫曼编码)是一种无失真编码的编码方式,Huffman 编码是可 变字长编码(VLC)的一种。
2.2 Huffman 编码基于信源的概率统计模型,它的基本思路是,出现概率大的信源符 号编长码,出现概率小的信源 符号编短码,从而使平均码长最小。
2.3 在程序实现中常使用一种叫做树的数据结构实现 Huffman 编码,由它编出的码是 即时码。
3 Huffman 编码的方法
3.1 统计符号的发生概率;
3.2 把频率按从小到大的顺序排列
3.3 每一次选出最小的两个值,作为二叉树的两个叶子节点,将和作为它们的根节点, 这两个叶子节点不再参与比 较,新的根节点参与比较;
3.4 重复 3,直到最后得到和为 1 的根节点;
3.5 将形成的二叉树的左节点标 0,右节点标 1,把从最上面的根节点到最下面的叶 子节点途中遇到的 0,1 序列串 起来,就得到了各个符号的编码。
4.静态链接库的使用
本实验包含两个project,第一个project为huff_code,是实现Huffman编码,会生成一个.lib文件。第二个project为Huff_run。在此,需要配置库目录属性和附加依赖属性。
二、Huffman编解码流程
编码流程:
解码流程: