【随时更新】知识点回顾

news2024/12/23 4:21:08

哈夫曼编码和解码

C++ 哈夫曼编码 【介绍编码过程】
哈夫曼树编码及其图形化的实现 【使用可视化方式展现最终编码效果】
Python中使用哈夫曼算法实现文件的压缩与解压缩 【Python实现】
哈夫曼树 C语言实现 【图解如何生成】

编码过程

1. 使用二进制流,统计当前文件有哪些字符
如python代码编写所示在这里插入图片描述
在这里插入图片描述

2. 为这些字符生成哈夫曼树。规则:
下文中的w权重,即为该字符的出现次数
(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);

(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;

(3)从森林中删除选取的两棵树,并将新树加入森林;

(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。
在这里插入图片描述

3. 生成编码

  • 从叶子结点出发,如果该结点为父结点的左孩子,则在编码追加“0”;如果为其右孩子,则编码追加“1”,
  • 编码结束后记得把字符串倒过来。因此编码是从叶子结点从下往上的,而解码需要从根节点从上往下

在这里插入图片描述
4. 压缩
压缩的文件头需要保存哈夫曼的信息

  1. 写入文件的原名
  2. 写入节点数量
  3. 计算最大频率的字节数,并写入
  4. 写入节点和对应频率
  5. 循环写入数据,每次凑够一个字节

5. 解压

  1. 读取写入文件名
  2. 读取节点数量
  3. 读取位宽
  4. 根据节点数量和位宽,读取节点和对应频率,重构哈夫曼树
  5. 循环读取数据,按照哈夫曼编码解码

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何利用Smartbi电子表格进行财务常用账簿数据的联动查询

财务,是几乎所有企事业单位内部的核心组织。单位今年耗费几何,企业去年赚多少钱,平均成本在什么水平,为国家创造多少税收等等,所有这些信息,最终都通过财务账表的方式来体现。可以说,大家工作辛…

OSI/RM七层网络模型和网络协议

目录 1.OSI/RM七层网络模型1.1 结构图1.2 各层功能 2.OSI七层、TCP/IP四层、五层网络模型对比3.各层对应网络协议3.1 应用层3.2 传输层 1.OSI/RM七层网络模型 OSI/RM(Open System Interconnection/Reference Model,开放式系统互联参考模型)是…

前端到接口层的反序列化流程

前置知识 参考我的另一篇博客,(209条消息) Servlet和SpringMVC_fengwuJ的博客-CSDN博客,描述了Servlet与SpringMVC的关系,大致可以知道从前端请求,到后端接口的中间过程 反序列化流程 前篇文章中,走到 getMethodPara…

平台总线模型简介

1. 平台总线介绍 平台总线模型将一个驱动分成两部分 device.c, driver.c。一个描述硬件, 一个控制硬件。 平台总线通过比较字符串, 将name相同的device.c和driver.c匹配到一起来控制硬件。 driver通过平台总线去拿到device.c内容。 平台总线的优点是减少重复代码 提高效率。 …

中间件(三)- Kafka(一)

Kafka 1. Kafka简介1.1 名字由来1.2 主要特性1.3 相关术语1.4 架构图1.5 消息队列1.6 Kafka消费模式1. 一对一消费模式2. 一对多消费模式 1.7 消息中间件 2. Kafka安装及使用2.1 下载kafka2.2 修改配置文件2.3 启动2.4 docker启动 3. 简单指令3.1 topic相关3.2 Kafka 生产/消费…

`JOB`的正确打开方式

文章目录 JOB的正确打开方式 简介工作原理使用场景使用方式注意事项启动JOB失败的情况JOB正确打开方式错误方式正确方式进阶方式终极方式 总结 JOB的正确打开方式 最近有一些小伙伴在使用JOB时,由于使用不当,引起一些问题。例如把license占满&#xff0c…

ASEMI代理长电可控硅MCR100-8特征,MCR100-8应用

编辑-Z 长电可控硅MCR100-8参数: 型号:MCR100-8 VDRM/VRRM:600V IT(RMS):0.8A 结点温度Tj:-40~125℃ 储存温度Tstg:-55 ~ 150℃ 通态电压VTM:1.7V 栅极触发电压VGT:0.8V 正…

泰克MDO4104C(Tektronix) mdo4104c混合域示波器

泰克 MDO4104C混合域示波器,1 GHz,4 通道,2.5 - 5 GS/s,20 M 点 ​泰克 MDO4104C 示波器是一款 6 合 1 集成示波器,可以配置可选的频谱分析仪、任意波形/函数发生器、逻辑分析仪、协议分析仪和 DVM/频率计数器。当配置…

黑盒测试能发现以下几类错误

黑盒测试能发现以下几类错误 黑盒测试是指在不考虑被测试软件的内部结构和工作原理的情况下,通过输入输出的方式对被测试软件进行测试。它主要关注被测试软件的功能是否达到预期的要求。黑盒测试能够发现以下几类错误。 1. 输入错误:黑盒测试可以检查被测…

如何增加网站权重?有效提高网站权重的技巧方法

权重对于网站优化来说非常的重要,那什么是网站权重呢?网站权重是指搜索引擎给网站(包括网页)赋予一定的权威值,对网站(含网页)权威的评估评价。一个网站权重越高,在搜索引擎所占的份…

【C++】虚表和虚基表到底有哪些区别?

虚表和虚基表 虚表虚基表虚拟继承和虚函数都存在时的对象模型 虚表 我们知道,如果类中声明了的方法是用virtual进行修饰的,则说明当前这个方法要作为虚函数,而虚函数的存储和普通函数的存储是有区别的 当有虚函数声明时,编译器会…

运营-16.个性化推荐

个性化推荐 个性化推荐,是根据用户的行为来分析用户的喜好,进而做商品精准推荐。 为什么要做个性化推荐? 1. 收集用户信息,精准获取用户需求; 2. 减少用户搜索商品的页面层级,提高转化率; …

聊聊 Milvus GC:从一次数据丢失事件展开

QueryNode 日志中频繁报错?对象存储数据离奇消失[1]? 令人震惊的数据丢失事件就这样发生了,一位来自 BOSS 直聘的 AI 研发工程师无意卷入到此次的风波中,他和 Milvus 社区的伙伴经过层层排查、抽丝剥茧,成功找出了问题…

还在用 JS 做节流吗?CSS 也可以防止按钮重复点击

目录 一、CSS 实现思路分析 二、CSS 动画的精准控制 三、CSS 实现的其他思路 四、总结一下 众所周知,函数节流(throttle)是 JS 中一个非常常见的优化手段,可以有效的避免函数过于频繁的执行。 举个例子:一个保存按…

opencv_c++学习(二十)

一、形态学应用案例 开、闭运算、形态学梯度等原理: 相关函数: morphologyEx(InputArray src, OutputArray dst, int op, lnputArray kernel, Point anchor Point(-1,-1), int iterations 1, int borderType BORDER_CONSTANT, const Scalar & border…

Android中静态和动态文字的绘制和测量

Android中静态和动态文字的绘制和测量 Android中自定义视图的时候存在两种情况,静态文字和动态文字。 顾名思义,静态文字就是显示内容是固定的,不会产生变化的文字,而动态文字则是内容会不断产生变化的文字信息。 在说明为什么…

Revit技巧 | Revit中图元不可见怎么办?

在revit中,控制图元课件性的设置有很多种,因此图元不可见,也会有各种各样的原因,这也是经常困扰新手的问题,下面我把这些解决办法做一些归纳总结。 图元如果过远偏离当前视图的中心,将导致视图不可见这时&…

MySQL:数据库的查询与连接

目录 1.复合查询 1.1 多表查询(联合查询) 1.2 join on (inner join) 1.3 自连接 1.4 子查询 1.5 合并查询 2.内外连接 3.关于高内聚、低耦合 1.复合查询 1.1 多表查询(联合查询) 什么是多表插叙?实际开发中往…

网络安全管理员证书有什么用?2023证书怎么考?证书报考条件?

网络安全管理员是做什么工作的呢?现如今,网络高速发展,带动了很多行业的兴起,比如说电商行业,今天已经步入到足不出户即可购物的时代了,当然网络也是一把“双刃剑”,带来了好处的同时&#xff0…

Sui Move Object讲解

要了解Sui的独特特性,首先要了解Sui中以对象为中心的数据模型。 Sui的设计初衷是重新定义数字资产所有权的可能性。重新设计的一个基本部分 — — Sui是以对象为中心的数据模型,也是Sui和其他Layer 1区块链之间的一个显著区别。 其他L1如何处理资产所有…