当前位置:网站首页>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. 读压缩后文件中的编码 找出字典中对应的字节 写入解压后文件中
边栏推荐
猜你喜欢
随机推荐
How to quickly become a software test engineer?What skills do testers need for a monthly salary of 15k?
打开VsCode经常弹出:尝试在目标目录创建文件时发生一个错误:拒绝访问:重试 跳过这个文件(不推荐),关闭安装程序
模型部署ONNX学习
Difference between netstat and ss command
goland console shows overlapping problem solution
ZZULIOJ:1017: 判断正整数位数
学习总结week4_1json
【Verilog数字系统设计(夏雨闻)5-------模块的结构、数据类型、变量和基本运算符号1】
maya视图如何切换
2022年P气瓶充装操作证考试题库及模拟考试
sql注入之宽字节注入,limit,order by
maya图片如何渲染
C语言结构体初识
MindSpore官方RandomChoiceWithMask算子用例报错
如何整合全流程数据,全面提升研发效能?|2分钟了解 ONES
Mini Program Navigation and Navigation Parameters
leetcode-218.天际线问题
原型和原型链
electron 应用开发优秀实践
ARP欺骗-教程详解