当前位置:网站首页>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. 读压缩后文件中的编码 找出字典中对应的字节 写入解压后文件中
边栏推荐
猜你喜欢
随机推荐
线程执行测试效果
Mini Program Navigation and Navigation Parameters
[crit] 23856#0: *101796511 stat()
ZZULIOJ:1028: I love 闰年!
树的介绍、树的定义和基本术语、二叉树的定义和性质、二叉树的顺序表示与实现和链式表示与实现以及树的遍历方法以及两种创建方式
How does a new tester do functional testing?Test thinking is really important
线程和线程间通信(C语言)
【科研绘图】琴图 +箱型图混合 matplotlib库和seabsorn库的使用
TCP协议之《ACK状态4种详解》
Basic understanding of network models
2022年P气瓶充装操作证考试题库及模拟考试
处理一些数据
Haproxy搭建Web群集
goland console shows overlapping problem solution
sql优化
基于Nonebot2的qq机器人如何测试超管账号
TCP协议之《TSQ控制》
数据库学习真难,头大,有偿提问
C语言原码,反码,补码与大小端
ARP欺骗-教程详解









