霍夫曼编码的简单介绍

霍夫曼编码,是一种可以根据字符出现频率给其赋予编码定义的编码方式。也因其编码方式的奇特,故此拥有了最佳编码的称号。
那么这种编码方式的优点在哪里呢?
霍夫曼编码所形成的码字不是唯一的,但编码效率是唯一的。在对最小的两个概率符号赋值时,通常规定为大的为“1”、小的为“0”,当然反之也可以。而如果两个符号的出现概率相等时,排列时无论哪个在前都无关紧要,所以哈夫曼所构造的码字不是唯一的。但对于同一个信息源,无论上述的前后顺序如何排列,它的平均码长是不会改变的,所以编码效率是唯一的。正是这样的编码方式使得霍夫曼编码可以用尽可能少的内存存储尽可能多的内容,从而成为了一种广为人知的文本压缩办法。
但这种编码方式也并非是万金油,而是只有当信息源各符号出现的概率很不平均的时候,霍夫曼编码的效果才明显。同时霍夫曼编码必须精确地统计出原始文件中每个符号的出现频率,如果没有这些精确的统计,将达不到预期的压缩效果。而且霍夫曼编码通常要经过两遍操作,第一遍进行统计,第二遍产生编码,所以编码速度相对慢。另外实现的电路复杂,各种长度的编码的译码过程也是比较复杂的,因此解压缩的过程也比较慢。这样看来,霍夫曼编码也有其局限性,但我们也无法否认这是最有效的基于有序频率二叉树的方法。
此外,这里博主另附霍夫曼树的原理,以比较F.O.R.G.E.T五个字母中每个字母的出现频率为例,如下图:霍夫曼编码的简单介绍_第1张图片将最小的两个字母频率相加合成一个新的节点,发现F与O的频率最小,故相加2+3=5。比较5.R.G.E.T,发现R与G的频率最小,故相加4+4=8。比较8.10.T,发现8与T的频率最小,故相加8+7=15。最后剩10.15,没有可以比较的对象,相加10+15=25。接着给霍夫曼树上同行的节点按照左0右1的顺序编码,即可得到这几个字母的编码了。
又学会了一种数据压缩的方法,是不是很开心呢!!!

你可能感兴趣的:(编码)