1. 概述&背景
哈夫曼编码是广泛地用于数据文件压缩的十分有效的编码方法。其压缩率通常在20%~90%之间。哈夫曼编码算法用字符在文件中出现的频率表来建立一
个用0,1串表示各字符的最优表示方式。给出现频率高的字符较短的编码,出现频率较低的字符以较长的编码,可以大大缩短总码长。
在学习哈夫曼编码之前,首先应了解前缀码:对每一个字符规定一个0,1串作为其代码,并要求任一字符的代码都不是其它字符代码的前缀,这种编码称为前缀码。比如:01,001,011就不满足前缀码的性质,因为011中包含01。而哈夫曼编码必须要满足前缀码的性质,否则会导致译码的时候出现多种译码方式,违背的唯一性准则。
2. 哈夫曼编码
哈夫曼编码的基本思想为:循环地选择具有最低频率的两个结点,生成一棵子树,直至形成树。我们通过一个例子来理解一下:
题目给出待编码的符号以及出现的频率,如下图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/d097818920ea481681e70a2abbaf13cd.png)
每次选择频率最小的两个符号,依次建树,并把这两个最小频率加和,用这个和来替换原来最小的两个频率:
![在这里插入图片描述](https://img-blog.csdnimg.cn/4acb9e4f8b0d4906b412ef18e212ef45.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/eb818d381b504dc0bd343c50e2988c11.png)