哈夫曼编码 哈夫曼编码(Huffman Coding)是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种
Huffman 于 1952 年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长 度最短的码字,有时称之为最佳编码,一般就叫作 Huffman编码
以哈夫曼树─即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩
在计算机信息处理中,“哈夫曼编码”是一种一致性编码法(又称"熵编码法"),用于数据的无损耗压缩
这一术语是指使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码
这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)
这种方法是由 David
Huffman 发展起来的
例如,在英文中,e的出现概率很高,而 z 的出现概率则最低
当利用哈夫曼编码对一篇英文进行压缩时,e 极有可能用一个位(bit)来表示,而 z 则可能花去 25 个位(不是26)
用普通的表示方法时,每个英文字母均占用一个字节(byte),即 8 个位
二者相比,e 使用了一般编码的1/8 的长度,z 则使用了 3 倍多
倘若我们能实现对于英文中各个字母出现概率的较准确的估算,就可以大幅度提高无损压缩的比例
本文描述在网上能够找到的最简单,最快速的哈夫曼编码
本方法不使用任何扩展动态库,比如 STL 或者组件
只使用简单的C 函数,比如:memset,memmove,qsort,malloc,realloc 和 memcpy
因此,大家都会发现,理解甚至修改这个编码都是很容易的
背景 哈夫曼压缩是个无损的压缩算法,一般用来压缩文本和程序文件
哈夫曼压缩属于可变代码长度算法一族