文章目录
- 🍊自我介绍
- 🍊哈夫曼编解码
- 🍊哈夫曼树介绍
- 🍊哈夫曼编码思想
你的点赞评论就是对博主最大的鼓励
当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~
🍊自我介绍
Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾” 和“内容共创官” ,现在我来为大家介绍一下有关物联网-嵌入式方面的内容。
哈夫曼编码在当前的编码过程中已经不怎么流行了,此次给大家介绍一下它的有关内容,给大家的扩充一下有关哈夫曼的思想。望大家共同学习。(此文章大家了解即可)
🍊哈夫曼编解码
生活中的例子
我们上学的时候,基本上都是以分数来评定一个人的成绩的。目前国家提倡了素质教育,我们把成绩模糊化,以优秀,良好,中等,及格,不及格这样的词语来模糊我们的分数,我们写代码的时候,可以把分数转换为代码形式(默认成绩都是合法的,不会出现低于零分,超过最高分的情况):
if(a < 60)b = "不及格";
else if(a < 70)b = "及格";
else if(a < 80)b = "中等";
else if(a < 90)b = "良好";
elseb = "优秀";
好的,上面的成绩粗略的来看没什么太大的问题。若是我们把它转换成我们二叉树的形式:
我们把班级的学生成绩做一个百分比,如下:
我们发现70-79这个阶段的人数最多。若是按照我们上面的代码形式进行判断的的话,我们需要经过3个if语句的判断,才能得到我们的结果。这样效率太低了,我们可以重新分配二叉树:
这个时候,我们访问[70-80]之间的学生,相对来说,效率就高了不少了。
🍊哈夫曼树介绍
基本概念:
哈夫曼树:它叫最优二叉树,指的是对于一组具有确定权值的叶子结点的具有最小带权路径长度的二叉树。
路径:从树中的一个结点到另一个结点之间的分支构成两个结点间的路径。
路径长度:路径上的分支数。
树的路径长度:从树的根节点到每个节点的路径长度之和。在结点数目相同的二叉树中,完全二叉树的路径长度最短。
结点的权:在一些应用中,赋予树中结点的一个有实际意义的数。
结点的带权路径长度:从该结点到树的根节点的路径长度与该节点的权的乘积。
树的带权路径长度(WPL):树中所有叶子节点的带权路径长度之和。
路径:A->B
B的路径长度:1
D的路径长度:2
树的路径长度:
1+2+2+1+2+2 = 10
D结点的带权路径长度2 * 3 = 6树的带权路径长度:2 * 3 + 2 * 4 + 2 * 5 + 2 * 6 = 36
🍊哈夫曼编码思想
原则
哈夫曼编码,就是可以用来对我们的数据进行编码,以提高压缩效率。
实战
问题:假设char a[] = “ABABCAA”,思考上述字符串应该定义多少字节存储?
答案:8字节
编码和解码过程
1.统计相同字符出现的次数,字符当作数据存储,次数当作权值
A:4
B:2
C:1
2.把结点按照权值两两合并,小的放左边,大的放右边,形成huffman树
3.对上图数据进行左0,右1的编码活动
A:1
B:00
C:01
4.对原始数据进行编码
原始数据:ABABCAA
编码数据:1 01 1 01 00 1 1
注:2字节即可存储编码后的数据
5.通过huffman树和密码数据解码
密码:1011010011
解码方法:从根节点开始访问,根据huffman树来依次访问,有字符数据的肯定是我们的叶子节点。