zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

6.5用二叉树实现哈夫曼编码

2023-04-18 15:22:17 时间

      莫尔斯编码是根据日常文本中各字符出现频率决定表示各字符的编码的数据长度。不过,该编码体系,对AAAAAABBCDDEEEEEEF这样的特殊文并不是最合适的。在莫尔斯编码中,E的数据长度最短,而在AAAAAABBCDDEEEEEEF这个文本中,出现最频繁的是字符A。因此,应该给A分配数据长度最短的编码。这样才会使压缩率更高。

      哈夫曼算法是指,为各压缩对象文件分别构造最佳的编码体系,并以该编码体系为基础来进行压缩。因此,用什么样的编码(哈夫曼编码)对数据进行分割,就由各个文件而定。用哈夫曼算法压缩过的文件中,存储着哈夫曼编码信息和压缩过的数据(图6-4)。

      把AAAAAABBCDDEEEEEEF中的A~F这些字符,按照“出现频率高的字符用尽量的位数编码来表示”这一原则进行整理。按照出现频率从高到低的顺序整理后,结果就如表6-3所示。

 

       在6-3的编码(方案)中,随着出现频率的降低,字符编码信息的数据位数也在逐渐增加到3位。这个编码体系是存在问题的。如果不加入用来区分字符的符号,这个编码(方案)就无法使用。

      而在哈夫曼算法中,通常借助哈夫曼树构造编码体系,即使在不使用字符区分的情况下,也可以构建能够明确进行区分的编码体系。也就是说,利用哈夫曼树后,就算表示各字符的数据位数不同,也就能够做成可以明确区分的编码,与RLE算法相比,程序的内容要复杂很多。

      自然界的树是从根开始生枝长叶的,而哈夫曼树则是从叶生枝,然后在生根。图6-5展示了对AAAAAABBCDDEEEEEEF进行编码的哈夫曼树的制作过程。