一看就懂的霍夫曼编码基本原理介绍

656 阅读2分钟

背景

霍夫曼编码是最短的一种编码方式,和很多天才的想法一样,它的发现也是出于偶然。霍夫曼读研的时候期末考试,老师给他们两个选择,老老实实准备考试或者发表一篇能用最简洁的方法编码的论文。霍夫曼选择了后者,正是这个期末考试激发出了著名的霍夫曼编码。接下来直入主题,用简单的例子给大家讲清楚霍夫曼编码。

基本原理

比如现在有一篇只有a,b,c,d,e字母的文章,我们统计好这篇文章中每个字母出现的概率,然后用霍夫曼编码的方式对文章的每个字母进行编码。问,要把霍夫曼整明白总共分几步?答:分三步:第一步统计字母在文章出现概率,第二步:画霍夫曼树,第三步:根据霍夫曼树得到编码。

过程如下:

第一步:统计每个字母出现的概率

1.png

第二步:霍夫曼树生成过程

2.png

解释下上面的树的生成过程:对照上面的字母出现的概率表,我们可以看到最小的两个值分别是b和e,所以b和e就在树最下方,且b小于e,所以b在最下方的左侧,e在右侧。接着b和e的值相加,得到0.25,0.25再和剩下的a,c,d排序,此时,最小的两个值是c,d,所以c,d的位置也确定了。由于是,d值都是一样的,在左边在右边都一样。接着cd相加再和剩下值排序,0.4,0.25和0.35,所以0.25和0.35相加,最后是0.4和0.6比较,最后相加得到1,总概率为100%,树形成,到达树顶。

第三步:根据霍夫曼树得到霍夫曼编码

3.png

解释下上面的编码的生成过程:从树的最顶端开始,依次往下,每条“路”上的0,1值组合成霍夫曼编码。以a为例,从长往下有两条路,“路”上的值分别是1,1,所以霍夫曼编码就是11,b为例:从上往下,“路上”依次1,0,0,所以b是100,一目了然,容易理解。

思考

我们思考一下,要做编码,要满足的基础条件是什么?答:一一对应。字母a就应该能得到11,反之11也能反过来得到a。霍夫曼树分支从最上面开始就是每个父都有两个分支,每个分支左边是0,右边是1,且每个字母都有一条属于自己的完整的“路”,这就保证了编码和字母的唯一对应的关系。确实简单又巧妙!