哈夫曼编码

文章目录

  • 🍊自我介绍
  • 🍊哈夫曼编解码
  • 🍊哈夫曼树介绍
  • 🍊哈夫曼编码思想


你的点赞评论就是对博主最大的鼓励
当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~


🍊自我介绍

  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树来依次访问,有字符数据的肯定是我们的叶子节点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/442811.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI 正在颠覆编程,程序员的出路在哪里?

AI 正在颠覆编程&#xff0c;程序员的出路在哪里&#xff1f; AI 的飞速发展&#xff0c;让程序员群体感受到了前所未有的压力。我们的工作&#xff0c;真的会被 AI 取代吗&#xff1f;未来的职业发展方向究竟在哪&#xff1f;我们应该害怕&#xff0c;还是应该拥抱这种变化&a…

Spring Boot ⽇志

目录 1.⽇志使⽤ 2.⽇志级别 3.⽇志配置 3.1配置⽇志级别 3.2⽇志持久化 3.3配置⽇志⽂件分割 4.更简单的⽇志输出 1.⽇志使⽤ 在使用之前我们先来了解一下为什么要使用&#xff1f; ⽇志的⽤途 1.系统监控 我们可以通过⽇志记录这个系统的运⾏状态&#xff0c;对数…

The legacy JS API is deprecated and will be removed in Dart Sass 2.0

The legacy JS API is deprecated and will be removed in Dart Sass 2.0 更新了sass版本后&#xff0c;启动项目控制台一直在报错&#xff0c;影响开发效率&#xff0c;强迫症表示忍受不了。 字面意思是&#xff1a;Sass在2.0版本将会移除legacy JS API&#xff0c;所以现在使…

Git的安装配置

目录 一、git和svn的区别是什么 二、下载Git 三、安装 四、使用 一、git和svn的区别是什么 1、git是分布式的&#xff0c;svn是集中的式的 2、git存储数据时是按元数据的方式存储&#xff0c;而svn是按文件的方式存储 3、git分支和svn的分支不一样 4、git没有全局版本号…

【Sceneform-EQR】(手势控制器实现)通过手势事件实现在AR/VR等三维场景中的控制模型旋转、平移与缩放

在Sceneform-EQR中实现旋转平移缩放手势 实现在AR/VR等三维场景&#xff0c;通过手势控制模型节点的缩放、平移和旋转。 实现思路 实现模型旋转 Sceneform-EQR(filament\opengl)中采用右手坐标系。通过欧拉角进行旋转采用Z->Y->X的顺序&#xff0c;在这里&#xff0c;…

iOS swift5 苹果app审核被拒 1.4.1

文章目录 1.被拒2. 官网1.4.1的规定3.如何解决参考博客 1.被拒 准则1.4.1-安全-人身伤害 该应用程序连接到外部医疗硬件&#xff0c;以提供医疗服务。然而&#xff0c;为了遵守准则1.4.1&#xff0c;您必须&#xff1a; -提供来自适当监管机构的文件&#xff0c;证明应用程序…

vim 操作

vim编辑器的有三种工作模式&#xff1a;命令模式、插入模式和底行命令模式 打开进入命令模式&#xff1a; 由命令模式到输入模式&#xff1a;i:在光标前插&#xff1b;a:在光标后插&#xff1b;o:在下一行插 由输入模式进入命令模式&#xff1a;esc 由命令模式进入底行命令…

LabVIEW激光诱导击穿光谱识别与分析系统

LabVIEW激光诱导击穿光谱&#xff08;LIBS&#xff09;分析系统利用高能量脉冲激光产生高温等离子体&#xff0c;通过分析等离子体发出的光谱来定性分析样品中的元素种类。该系统的开发集成了软件与硬件的设计&#xff0c;实现了自动识别和定性分析功能&#xff0c;适用于环境监…

多表数据实时同步和批量实时同步怎么高效实现?

对于企业来说&#xff0c;准确、及时的数据是进行数据分析和决策支持的基础。如果各个系统中的数据不能及时同步&#xff0c;就会影响数据分析的结果和决策的准确性。通过数据同步&#xff0c;可以将企业内部各个系统中的数据整合到一个数据仓库或数据分析平台中&#xff0c;为…

WSL(Windows Subsystem for Linux)——简单的双系统开发

文章目录 WSLWSL的作用WSL的使用WSL的安装挂载磁盘的作用安装linux发行版 WSL 前言&#xff1a;本人由于在开发中需要linux环境&#xff0c;同时还想要直接在Windows下开发&#xff0c;来提升开发效率&#xff0c;随即简单学习WSL。 WSL&#xff08;Windows Subsystem for Li…

水污染急需机器人,材料局限遇难题,MXene 水凝胶有潜力

大家好&#xff01;今天我们来了解一项关于水污染管理的前沿研究——《A MXene Hydrogel‐Based Versatile Microrobot for Controllable Water Pollution Management》发表于《Advanced Science》。水污染&#xff0c;尤其是有机染料污染&#xff0c;严重威胁着我们的健康和环…

【Linux基础】03 Linux环境基础开发工具使用

1. yum ——软件包管理器 yum 是我们 Linux 预装的一个指令&#xff0c;搜索、下载、、安装对应的软件 yum 相当于 Linux 的应用商店&#xff01; 安装与卸载 yum list | grep command 通过 yum list 命令可以罗列出当前一共有哪些软件包. 由于包的数目可能非常之多, 这里我…

大数据毕业设计选题推荐-电影票房数据分析系统-Python数据可视化-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

【CKA】CKA第二次考试经验总结

第一次考试申诉回来后&#xff0c;就重新预约了考试。 这一次考试&#xff0c;认真吸取了第一次的经验教训&#xff0c;认真对待&#xff0c;再不敢马虎大意了&#xff0c;哈哈。 一、考试前 以下准备做了好几次&#xff1a; 1、考试环境&#xff1a;重新找了有插网线的会议室…

微软官网列出了 Windows 11 LTSC 2024 中的全部新功能

今天早些时候&#xff0c;微软发布了有关受托管PC的Windows 11 24H2 升级和兼容性的详细信息。 该帖子针对的是负责在各自办公室和组织中处理系统的 IT 系统管理员。与此同时&#xff0c;微软也发布了有关 Windows 11 LTSC 或长期服务渠道的信息。 该公司已于四月早些时候证实…

STM32 Hal库SDIO在FATFS使用下的函数调用关系

STM32 Hal库SDIO在FATFS使用下的函数调用关系 本文并不将FATFS的相关接口操作&#xff0c;而是将HAL在使用FATFS通过SDIO外设管理SD卡时&#xff0c;内部函数的调用逻辑&#xff0c;有助于当我们使用CUBEMX生成FATFS读取SD卡的代码时无法运行时Debug。本文也会说明一些可能出现…

力扣LeetCode-链表中的循环与递归使用

标题做题的时候发现循环与递归的使用差别&#xff1a; 看两道题&#xff1a; 两道题都是不知道链表有多长&#xff0c;所以需要用到循环&#xff0c;用到循环就可以把整个过程分成多个循环体&#xff0c;就是每一次循环要执行的内容。 反转链表&#xff1a; 把null–>1…

JavaEE: 深入解析HTTP协议的奥秘(3)

文章目录 HTTP认识 "报头"(Header)认识 "状态码"(status code) HTTP JavaEE: 深入解析HTTP协议的奥秘(2) 书接上文~ 认识 “报头”(Header) Header 的整体的格式是"键值对"结构. 每个键值对占一行,键和值之间使用分号分隔. Host 表示服务器主…

【AI学习】Mamba学习(五):《HiPPO: Recurrent Memory with Optimal Polynomial Projections》

SSM之后&#xff0c;就需要接着学习HiPPO了。 《HiPPO: Recurrent Memory with Optimal Polynomial Projections》 论文地址&#xff1a;https://arxiv.org/abs/2008.07669 摘要 从连续数据中学习的一个核心问题是&#xff0c;随着更多数据的处理&#xff0c;以增量方式表示累…

【隐私计算篇】多方安全计算之函数秘密共享(FSS)

1. 函数秘密共享(FSS)定义 秘密共享是一种将一个值拆分为多个份额的方法&#xff0c;形式有多种&#xff0c;可以参考《安全多方计算(MPC)矩阵乘法算子的原理分析》。这里主要提及加法秘密共享&#xff0c;使得&#xff1a;这些份额可以重新组合以还原出秘密值&#xff1b;任…