首页 > 编程语言 >《程序是怎样跑起来的》第六章——尝试亲自压缩数据

《程序是怎样跑起来的》第六章——尝试亲自压缩数据

时间:2024-02-24 12:22:21浏览次数:27  
标签:尝试 字符 哈夫曼 编码 RLE 压缩 算法 第六章

回答章前问题:

1、字节,一字节等于八位

2、DOC和TXT肯定不是,DOC是word文档的后缀,TXT是文本文件的后缀。答案是LZH。(压缩文件扩展名)

3、?            注:不会,问题:数据的值*循环次数 来表示的压缩方法是RLE算法还是哈夫曼算法?  (什么是RLE算法?哈夫曼算法?)

4、 一个半角英数为一字节。        注:SHIFT JIS字符编码是什么? 

5、BMP格式图像文件没有压缩过

6、可逆压缩和非可逆压缩,为字面意思。前者数据可恢复,后者不可。

解析: 

3、RLE算法。RLE(Run-Length Encoding)算法是一种简单的无损数据压缩算法,用于压缩连续重复出现的数据。

RLE 算法的基本思想是将连续重复出现的字符或数据序列替换为一个计数值和对应的字符或数据。具体来说,RLE 算法遍历输入数据,统计连续相同的字符或数据的个数,并将计数值与对应的字符或数据一起记录下来。

例子:AAAABBBCCDAA        RLE压缩后——>      4A3B2C1D2A

哈夫曼算法:哈夫曼编码(Huffman Coding)是一种基于字符出现频率的无损数据压缩算法。它通过使用不同长度的编码来表示不同字符,从而实现对数据进行高效压缩的目的。

哈夫曼编码的基本思想是,对于出现频率较高的字符,分配较短的编码;而对于出现频率较低的字符,分配较长的编码。这样可以确保整体编码长度的平均值最小,从而实现对数据的高效压缩。

 

  1. 统计输入数据中每个字符出现的频率。
  2. 根据字符频率构建哈夫曼树(Huffman Tree),其中频率较低的字符在树的较深位置,频率较高的字符在树的较浅位置。
  3. 通过遍历哈夫曼树,为每个字符赋予对应的哈夫曼编码,确保没有编码是另一个编码的前缀(即具有前缀码)。
  4. 使用所生成的哈夫曼编码对输入数据进行编码,并将编码后的数据保存或传输。

4、SHIFT JIS(Shift Japanese Industrial Standards)是一种用于编码日文字符的字符编码标准。


 在压缩数据之前我们要知道数据在计算机中保存在文件中的数据形式,文件是存储数据到磁盘的一种形式,程序文件中数据的单位是字节,文件就是字节数据的集合,用二进制来表示的话就是00000000~11111111.若存储的是纯文字,就是文本文件。若存储的的是图片就是图像文件。在任何情况下,文件中的字节都是连续存储的。

 文件有多种压缩机制:如RLE算法,在章前题中就有解析,举个例子:AAAAABBBBCCDDDDD这样一串数据。通过RLE压缩,就是数据*重复次数。

就压缩成了A5B4C2D5,页就压缩了原来的16字节变成了压缩后的8字节。这种“数据*重复次数”的压缩算法就称为RLE算法。RLE算法虽然在图像,文件的压缩中有不错的表现,但在压缩文本文件中却并不适合。因为文本文件中连续出现同样字符的情况很低。

 如图,RLE算法在压缩文本文件时文件大小反而还极大的增加了。

但正如一开始就说的,压缩技巧有很多种,第二个要介绍的就是哈夫曼算法。正常来说,半角英文数字的一个字符为一个字节,带哈夫曼算法抛却了这一点,在文本文件中,字符的出现不是连续的,数量也不是固定的,哈夫曼算法用多次出现的数据用小于八位的字节数来表示,不常用的数据可以用超过八位的字节数来表示。若A出现100次,Z出现5次,如果都用八位来表示的话,就是(100*8)+(5*8)=840,而利用哈夫曼算法,A用2位来表示,Z用10表示,压缩后仅为240位。(注:计算机以八位一字节的方式存储,不管满没有满八位,最终都要以八位为单位存储在文件中,过程虽复杂,但压缩率的回报很高。)另外,哈夫曼算法的压缩位数并不能随意指定,它是根据字符出现的频率动态分配不同长度的编码,使得整体的编码长度更短,从而实现数据压缩。

哈夫曼算法压缩后的文件分为两部分,一部分是哈夫曼编码的信息(类似文件头),另一部分是压缩后的数据。

 

 如图通过对文件字符的编码,制作出了这样一个文件,出现次数越多的字符,位数越小,这就是哈夫曼树。

 

 

 

标签:尝试,字符,哈夫曼,编码,RLE,压缩,算法,第六章
From: https://www.cnblogs.com/wcpp/p/18022941

相关文章

  • 《程序是怎样跑起来的》第六章读后感
    我是计应232班的赵精艺。第六章讲的主要是亲自尝试压缩数据。在正文前的几个问题中我知道了一些有关于本章的内容,并且了解到了可逆压缩与不可逆压缩的不同点:压缩后的数据能够复原的是可逆压缩,无法复原的是不可逆压缩。文件是以字节为单位保存的,文件是将数据存储在磁盘等存储媒介中......
  • 第六章观后感
    在阅读了《程序是怎样跑起来的》第六章之后,我对数据的压缩有了更为深入的了解。这一章中,作者详细介绍了数据压缩的概念、方法和重要性,并引导我们亲自尝试进行数据压缩。首先,我认识到数据压缩并不是一个全新的概念。在日常生活和工作中,我们经常需要进行数据的压缩,比如为了节省存储......
  • 《程序是怎样跑起来的》第六章读后感
        通过这一章的学习,我了解到压缩数据的原理和常见的压缩方法。数据压缩的目的是减少数据的存储空间和传输带宽,同时保持数据的完整性和可还原性。    我认识到压缩的关键在于发现和利用数据中的冗余信息。通过一些算法和技术,可以将重复或相似的部分进行编码和表示,......
  • 《程序是怎样跑起来的》第六章
    当我翻阅到“亲自尝试压缩数据”这一章节时,我被作者深入浅出的叙述和丰富的实践案例所吸引。这部分内容不仅是对数据压缩概念的讲解,更是一次思考与实践相结合的完整体验。阅读完毕后,我对于数据压缩技术的理解有了全新的认识,也对这项技术背后蕴含的智慧感到赞叹。本章重点介绍了压......
  • java 异步导出zip压缩包
    需求:图片文件太大,采用压缩包下载/** *图片zip压缩包下载 *@paramresponse *@paramzipName压缩包名字 *@paramurls文件图片下载URL路径 *@paramimagesUrlsURL与对应文件名字map *@throwsException */publicstaticvoidexportZip(HttpServletRespon......
  • 第六章 自己动手压缩数据
    《程序是怎样跑起来的》这本书的第六章“自己动手压缩数据”为读者揭示了一个神奇而又实用的世界——数据压缩。在阅读这一章之后,我不仅对数据压缩的原理有了更深入的理解,也对计算机科学中的实用技术产生了浓厚的兴趣。这一章首先介绍了文件是以字节为单位记录的。文件是在磁盘等......
  • 《程序是怎样跑起来的》第六章读后感
    《程序是怎样跑起来的》第六章讲的主要是亲自尝试压缩数据,我们可以学习到程序文件中的数据是如何以字节为单位存储在磁盘等存储媒介中的。文件是字节数据的集合。本章介绍了文件存储的基本单位——字节,1字节表示的字节数据有256种,用二进制数来表示的话,其范围就是00000000~1111111......
  • 《程序是怎样跑起来的》第六章观后感。
    我是计应232的学生张凯源,今天来分享《程序是怎样跑起来的》第六章观后感。第六章主要讲解了几种压缩文件的方法:RLE算法、哈弗曼编码。首先作者告诉我们,文件是以数据的方式来进行储存的,然后紧接着就向我们详细的讲解了RLE算法的机制。RLE算法就是采用“字符*重复次数”来进行文件......
  • 第六章 亲自尝试压缩数据 笔记
    在本章中,我首先了解了数据压缩的基本概念。数据压缩就是通过特定的算法,去除数据中的冗余信息,从而减少数据的存储空间和传输时间。压缩后的数据需要通过解压缩才能恢复到原始状态。这个过程听起来简单,但实际上涉及到复杂的算法和精细的处理。接下来,作者详细介绍了两种主要的压缩方......
  • python实现zip分卷压缩与解压
    1. python实现zip分卷压缩WinHex开始16进制一个一个文件对比WinRar创建的分卷压缩和单个zip文件的差异。如果想把单个大文件 test.zip ->分卷文件 test.z01、test.z02、test.zip首先,在创建的第一个分卷文件 test.z01的前面加上 \x50\x4b\x07\x08 这个是分卷压缩......