0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

内存和磁盘的关系&数据压缩(下)

jf_78858299 来源:前端柒八九 作者:前端柒八九 2023-03-31 16:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

文件以字节位单位保存

文件是将数据存储在磁盘等存储媒介中的一种形式。程序文件中存储数据的单位是 「字节」 。文件的大小之所以用xxKBxxMB等来表示,就是因为文件是以字节(B = Byte)为单位来存储的。

❝文件就是**「字节数据的集合」**

用1字节(=8位)表示的字节数据有256种,用二进制数来表示的话,其范围就是00000000~11111111

  • 如果文件中存储的数据是文字,那么该文件就是**「文本文件」**
  • 如果是图形,那么该文件就是 「图像文件」

❝在任何情况下,文件中的字节数据都是 「连续存储」 的。

图片


RLE算法

我们来尝试对存储着AAAAAABBCDDEEEEEF这17个 「半角字符」 的文本文件进行压缩。

由于半角字母中, 「1个字符是作为1个字节」 的数据被保存在文件中的。因此,上述文件的大小就是17个字节。

我们可以采用将文件的内容用 「字符 × 重复次数」 这样的表现方式来压缩。所以,AAAAAABBCDDEEEEEF就可以用A6B2C1D2E5F1来表示。而A6B2C1D2E5F1是12个字符,那么对应的文本文件就变成了12字节。

12字节÷17字节 ≈70%。也就是采用上述的方式,使得文件压缩到原来大小的70%

图片

把文件内容用 「数据 × 重复次数」 的形式来表示的压缩方法称为RLE(Run Length Encoding,行程长度编码)算法

RLE算法的缺点

然而在实际的文本文件中,同样字符多次重复出现的情况并不多见。虽然针对 「相同数据经常连续出现」 的图像、文件等,RLE算法可以发挥不错,但是它并不适合文本文件的压缩。


哈夫曼算法

「哈夫曼算法」 是哈夫曼与1952年提出来的压缩算法。

针对,哈夫曼算法,首先要抛弃 「半角英文数字的1个字符是1个字节(8位)的数据」 这一概念。

文本文件是由不同类型的字符组合而成的,而且不同的字符出现的次数也是不同的。例如,在某一个文本文件中,A出现了100次,Q出现了3次。

「哈夫曼算法」 的关键就在于 「多次出现的数据用小于8位的字节数来表示,不常用的数据则用超过8位的字节数来表示」

AQ都用8位来表示时,原文件的大小就是100次 × 8位 + 3次 × 8位 = 824位,而假设A用2位,Q用10位表示,压缩后的大小就是100次 × 2位 + 3次 × 10位 = 230位

不过,有一点需要注意,

❝不管是不满8位的数据,还是超过8位的数据,最终都要 「以8位为单位保存到文件中」

这是因为磁盘是以字节(8位)为单位来保存数据的。

图片

用二叉树实现哈夫曼编码

哈夫曼算法是指,为 「各压缩对象文件」 分别构造最佳的编码体系,并以该编码体系为基础来进行压缩。因此,用什么样的编码(哈夫曼编码)对数据进行分割,就要由各个文件而定。

用哈夫曼算法压缩过的文件中,存储着哈夫曼编码信息和压缩过的数据。

图片

在哈夫曼算法中,通过借助 「哈夫曼树」 构造编码体系,即使在不使用字符区分符号的情况下,也可以构建能够明确进行区分的编码体系。也就是说,利用哈夫曼树后,就算表示各字符的数据 「位数」 不同,也能够做成明确区分的编码。

制作哈夫曼树

自然界的树是从根开始生枝长叶,而哈夫曼树是 「从叶生枝,然后再生根」

图片

哈夫曼算法能够大幅度提升压缩比率

使用哈夫曼树后,出现 「频率越高的数据所占用的数据位数就越少」 ,而且数据的区分也可以很清晰的实现。


可逆压缩和非可逆压缩

  • 「可逆压缩」 :能还原到压缩前状态的压缩
  • 「非可逆压缩」 :无法还原到压缩前状态的压缩

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11216

    浏览量

    222917
  • 计算机
    +关注

    关注

    19

    文章

    7764

    浏览量

    92676
  • 计数器
    +关注

    关注

    32

    文章

    2306

    浏览量

    97567
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    LZO Data Compression,高性能LZO无损数据压缩加速器介绍,FPGA&ASIC

    LZOAccel-CLZO Data Compression Core/无损数据压缩IP CoreLZOAccel-C是一个无损数据压缩引擎的FPGA硬件实现,兼容LZO 2.10标准。Core接收
    发表于 01-24 23:53

    MapReduce数据压缩的基本原则

    黑猴子的家:MapReduce数据压缩
    发表于 05-24 12:45

    【ELT.ZIP】OpenHarmony啃论文俱乐部——多层存储分级数据压缩

    层次速度更快,但容量更小);减少数据量最常用的是数据压缩,在合适的场景和环境匹配对应的压缩技术是尤其需要关注的。自然而然地,我们就会联想到:如果二者同时进行,不就可以相互受益了吗?
    发表于 07-23 13:20

    【学习打卡】【ELT.ZIP】OpenHarmony啃论文俱乐部——多层存储分级数据压缩

    层次速度更快,但容量更小);减少数据量最常用的是数据压缩,在合适的场景和环境匹配对应的压缩技术是尤其需要关注的。自然而然地,我们就会联想到:如果二者同时进行,不就可以相互受益了吗?
    发表于 07-23 13:26

    数据压缩技术

    一、数据压缩的必要性二、多媒体数据压缩的可能性三、压缩方案应满足的要求四、编码方案分类五、数据压缩(编码)的主要步骤六、一些基本的压缩技术七
    发表于 03-25 13:19 35次下载

    传真机的数据压缩系统

    传真机的数据压缩系统         
    发表于 12-29 16:51 802次阅读

    JPEG2000数据压缩的FPGA实现

    高性能的数据压缩可以有效的减少数据对存储空间和通信带宽的要求,降低通信成本。为解决图像数据的高压缩性能问题,本文提出了基于JPEG2000标准的数据
    发表于 04-16 10:39 47次下载
    JPEG2000<b class='flag-5'>数据压缩</b>的FPGA实现

    JAVA教程之数据压缩与传输

    JAVA教程之数据压缩与传输,很好的JAVA的资料,快来学习吧
    发表于 04-11 17:28 10次下载

    数据压缩的重要性

    数据压缩是指在不丢失有用信息的前提下,缩减数据量以减少存储空间,提高其传输、存储和处理效率,或按照一定的算法对数据进行重新组织,减少数据的冗余和存储的空间的一种技术方法。
    的头像 发表于 02-28 10:45 1.5w次阅读

    数据压缩算法计算步骤及过程

    一种非常简单的压缩方法是行程长度编码,这种方法使用数据数据长度这样简单的编码代替同样的连续数据,这是无损数据压缩的一个实例。这种方法经常用
    的头像 发表于 02-28 10:51 1.3w次阅读
    <b class='flag-5'>数据压缩</b>算法计算步骤及过程

    有趣!史记:数据压缩算法列传

    简单地说,如果没有数据压缩技术,我们就没法用 WinRAR 为 Email 中的附件瘦身;如果没有数据压缩技术,市场上的数码录音笔就只能记录不到20 分钟的语音;如果没有数据压缩技术
    的头像 发表于 11-11 15:21 1326次阅读

    内存磁盘关系&amp;amp;数据压缩(上)

    计算机中主要的存储部分是 「内存」 和 「磁盘」 。 「磁盘中存储的程序,必须要加载到内存后才能运行。在磁盘中保存的原始程序是无法直接运行的
    的头像 发表于 03-31 16:21 1748次阅读
    <b class='flag-5'>内存</b>和<b class='flag-5'>磁盘</b>的<b class='flag-5'>关系</b>&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>数据压缩</b>(上)

    高性能无损数据压缩FPGA IP,LZO无损数据压缩IP

    LZOAccel-C是一个无损数据压缩引擎的FPGA硬件实现,兼容LZO 2.10标准。 Core接收未压缩的输入数据块,产生压缩后的数据
    的头像 发表于 01-25 13:39 991次阅读
    高性能无损<b class='flag-5'>数据压缩</b>FPGA IP,LZO无损<b class='flag-5'>数据压缩</b>IP

    LZO Data Compression,高性能LZO无损数据压缩加速器介绍,FPGA&amp;amp;ASIC

    LZOAccel-C是一个无损数据压缩引擎的FPGA硬件实现,兼容LZO 2.10标准。Core接收未压缩的输入数据块,产生压缩后的数据块。
    的头像 发表于 01-13 12:41 1023次阅读
    LZO Data Compression,高性能LZO无损<b class='flag-5'>数据压缩</b>加速器介绍,FPGA&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;ASIC

    内存场景的高效压缩利器:FastLZ压缩库应用实践指南

    在资源受限环境中,数据压缩既要追求速度又要节省内存。本文聚焦FastLZ压缩库,深入探讨其在低内存场景的应用实践,通过解析其核心算法与优化
    的头像 发表于 07-22 15:13 202次阅读
    低<b class='flag-5'>内存</b>场景<b class='flag-5'>下</b>的高效<b class='flag-5'>压缩</b>利器:FastLZ<b class='flag-5'>压缩</b>库应用实践指南