文件压缩 之RLE算法和哈弗曼算法

2023-10-07 20:10
文章标签 算法 压缩 弗曼 rle

本文主要是介绍文件压缩 之RLE算法和哈弗曼算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文件压缩

1.什么是文件?

文件是存储在磁盘等媒介中的一种形式,磁盘是以字节为单位存储的,所以文件也是。存储文字的叫文本文件,存储图形的叫图像文件。

2.压缩算法之RLE算法

RLE算法是使用“数据 * 重复次数”来表示数据的一种方法。比如数据AAAAASSRRR,使用RLE算法表示为:A5S2R3,从10个字节压缩到6个字节。

但这种算法只适用于有重复字节出现的文件,比如图像文件,但并不实用与于文本文件。

3.压缩算法之哈弗曼算法

哈弗曼算法是将出现频率高的字符用尽量少的位数来表示。比如一个文本文件中“I”出现100次、“L”出现3次,如果一个字符用一个字节表示则为103 * 8 = 824bit,如果“I”用2bit,“L”用10bit表示,则为100 * 2 + 3 * 10 = 230bit。

哈弗曼算法会为每个要压缩的文件构造最佳的编码体系,再以此为基础进行压缩和解压。压缩后的文件存着哈弗曼编码信息和压缩后的数据。
在这里插入图片描述

注意:压缩后的文件也是以字节为单位存储的
在这里插入图片描述

4.使用哈弗曼树构造编码体系
在这里插入图片描述
可以看到,出现频率最高的字符对应编码位数最短,并且编码不会出现歧义。解压时以位为单位对数据进行排查,与哈弗曼树比较看是否找到相应编码。

5.可逆压缩与不可逆压缩

顾名思义,可逆压缩指解压后与压缩前一模一样,比如文本文件必须是可逆压缩。不可逆压缩则相反,比如图像文件只要解压后不影响使用就没必要一模一样。

6.说明

本文是《程序是怎样跑起来的》读书笔记,压缩算法有很多种,这里只介绍了其中两种,由于各文件压缩需求不同,至今学界也不能提出一种万能压缩算法。所以我们也有机会原创自己的压缩算法,压缩算法的拙劣需要花费功夫。

如发现什么错误,请兄弟们指正,大家一起进步!

这篇关于文件压缩 之RLE算法和哈弗曼算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_50260670/article/details/117462098
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/160142

相关文章

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n