当前位置:网站首页>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. 读压缩后文件中的编码 找出字典中对应的字节 写入解压后文件中
边栏推荐
猜你喜欢
超全面的Android面试题汇总
C语言顺序表(源码)
GBase 8s打开工具就报错“配置文件有误” !!!为什么
Do you know these basic types of software testing?
2022年电工(初级)国家题库及模拟考试
C语言原码,反码,补码与大小端
【MindSpore】在训练过程中的step代表什么?
Classes and interfaces
【科研绘图】琴图 +箱型图混合 matplotlib库和seabsorn库的使用
How to quickly become a software test engineer?What skills do testers need for a monthly salary of 15k?
随机推荐
郑州轻工业大学OJ合集(C语言)【正在整理】
留言板
The so-called software testing ability is actually these 5 points
Kotlin协程:父子协程的绑定与传递
TCP协议之《TSQ限值tcp_limit_output_bytes》
How does a new tester do functional testing?Test thinking is really important
js原型和原型链以及原型继承
【2022河南萌新联赛第(五)场:信息工程大学】【部分思路题解+代码解析】
ZZULIOJ:1029: 三角形判定
学习总结week4_1json
ZZULIOJ:1017: 判断正整数位数
2022年电工(初级)国家题库及模拟考试
结构体的内存对齐问题
【mindspore产品】【8卡分布式训练】davinci_model : load task fail, return ret
一种能让大型数据聚类快2000倍的方法,真不戳
模型部署ONNX学习
测试常见问题100类(1)
TCP协议之《数据与控制流程交叉时的延迟处理》
ES高亮显示语法
c语言:通讯录(动态版本)