首页 > 其他分享 >6.5 用二叉树实现哈夫曼编码

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

时间:2023-02-11 20:34:58浏览次数:36  
标签:体系 编码 哈夫曼 字符 区分 6.5 二叉树 AAAAAABBCDDEEEEEF

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

哈夫曼算法是指:为各压缩对象文件分别构造最佳的编码体系,并以该编码体系为基础来进行压缩。因此,用什么样式的编码(哈夫曼编码)对数据进行分割,就要由各个文件而定。

用哈夫曼算法压缩过的文件中,存储着哈夫曼编码信息和压缩过的数据(图6-4)。

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

在上图中的编码(方案)中,随着出现频率的降低,字符编码信息的数据位数也在逐渐增加。

不过这个编码体系是存在问题的,如100这个3位的编码,它的意思是用1、0、0这3个编码来表示E、A、A呢?还是用10、0这两个编码来表示B、A呢?亦或是用100来表示C呢?这些都无法进行区分。因此,如果不加入用来区分字符的符号,这个编码(方案)就无法使用。

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

如何制作哈夫曼树。自然界的树是从根开始生枝长叶的。而哈夫曼树则是从叶生枝,然后再生根。如下图:

   

 

标签:体系,编码,哈夫曼,字符,区分,6.5,二叉树,AAAAAABBCDDEEEEEF
From: https://www.cnblogs.com/ttmeng/p/17112502.html

相关文章