当前位置:网站首页>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. 读压缩后文件中的编码 找出字典中对应的字节 写入解压后文件中
边栏推荐
- 暑假第三周总结博客 - 五种传值方式
- golang中的URL 的编码和解码(转)
- 电话自动拨号在电脑上自动拨打
- 使用 requestAnimationFrame 提升 web 性能
- 【mindspore产品】【8卡分布式训练】davinci_model : load task fail, return ret
- Flink CDC介绍和个人理解
- Software life cycle (the work of each phase of software engineering)
- goland console shows overlapping problem solution
- 学习总结week4_1json
- [STL]map与set
猜你喜欢
Pytorch中的torch.index_select对应MindSpore哪个方法
2022年P气瓶充装操作证考试题库及模拟考试
【IO复用】poll
How to quickly become a software test engineer?What skills do testers need for a monthly salary of 15k?
C语言原码,反码,补码与大小端
打开VsCode经常弹出:尝试在目标目录创建文件时发生一个错误:拒绝访问:重试 跳过这个文件(不推荐),关闭安装程序
数据切片问题
2022年起重机械指挥操作证考试题库及模拟考试
自定义训练,使用Generator dataset迭代数据报错
sql注入之宽字节注入,limit,order by
随机推荐
874. 筛法求欧拉函数
ZZULIOJ:1017: 判断正整数位数
Embedded Sharing Collection 32
最牛最全的 Postman 实现 API 自动化测试教程
The so-called software testing ability is actually these 5 points
暑假第三周总结博客 - 五种传值方式
maya图片如何导入
使用 requestAnimationFrame 提升 web 性能
2022年P气瓶充装操作证考试题库及模拟考试
ARP Spoofing - Tutorial Details
TCP协议之《TCP_CORK选项》
2022年电工(初级)国家题库及模拟考试
torch.nn.CrossEntropyLoss()对应的MindSpore算子是哪个?
TCP协议之《TSQ控制》
数据仓库建模实践
mysqldump和XBK备份
留言板
【2022河南萌新联赛第(五)场:信息工程大学】【部分思路题解+代码解析】
自定义训练,使用Generator dataset迭代数据报错
Spark面试问题总结