当前位置:网站首页>Day14/15/16:哈夫曼树、哈弗曼编码(压缩与解压缩)

Day14/15/16:哈夫曼树、哈弗曼编码(压缩与解压缩)

2022-08-10 03:40:00 _Brooke_

一、相关基础知识

        1.unsigned char与signed char 的区别:

         2.哈夫曼树(最优树、最佳搜索树):

①路径长度的概念
1.路径:从一个结点到另一个结点之间的分支序列
2.结点之间的路径长度:从一个结点到另一个结点之间的分支数目
3.树的路径长度(用PL表示):从树的根到每一个结点的路径长度之和  → 深度之和

 PL = 0+1+1+2+2+2+2+3=13

 

 WPL=7*2+5*2+2*2+4*2=36

②构建一颗Huffman树

以数据{5,6,7,8,15}为例

注意观察特征:原数据5\6\7\8\15均只会出现在叶子结点(自下而上构建新的节点) 

3.压缩与解压缩:

①文件  :

                    有损压缩   无损压缩(Huffman为无损压缩)
                    png  有损压缩
                    9个像素合为一个像素

②例子:

"abbbbcccccccccddddddddddddddfffffffffffffffffffffff"
'a'        1     'b'        4    'c'        9      'd'        14     'f'        23
原来:54字节

---->Huffman编码后:24*1 +  14*2 + 9*3 + 4*4 + 1*4= 13字节不到 

③压缩过程: 


    1. 分析待压缩文件
        (获取文件中出现过的字节   和  每个出现过的字节的出现次数   组合成字典(索引))
    2. 根据字典组建哈夫曼树,获取每个字节对应的哈夫曼编码
    3. 创建压缩后文件,把字典写入压缩后文件中
       然后 一个一个字节去读待压缩文件的内容  把它转换成对应的编码
       把编码写入压缩后文件中

④解压过程:


    1. 从压缩后文件中读取字典
    2. 读压缩后文件中的编码  找出字典中对应的字节 写入解压后文件中

原网站

版权声明
本文为[_Brooke_]所创,转载请带上原文链接,感谢
https://blog.csdn.net/zjjaibc/article/details/126240699