在学习压缩文件前需要先了解文件是将数据存储在磁盘等存储媒介中的一种形式,并且程序文件中存储数据的单位是字节,这也是为什么文件的大小用xxKb或xxMb等来表示市的原因。文件又是什么呢?它就是字节数据的集合,而且文件包括文本文件和图像文件,另外我们需要特别注意任何情况下其中的字节数据都是连续存储的。 既然我们了解了文件,接下来就让我们来学习文件的压缩机制吧!本章会介绍两种常用的压缩技巧:1、RLE算法的机制(Run Length Enconding,行程长度编码)="数据×重复次数",常被用于压缩传真的图像,例子如下图:
缺点:因为文本文件中同样字符多次重复出现的情况并不多见,因此他不适合文本文件的压缩。2、哈夫曼算法,其关键是多次出现的数据用小于八位的字节数来表示,不常用的数据则可以用超过八位的字节数来表示。其中数据都要以8位为单位保存到文件中,不论其满或是不满。相对程序内容更复杂,但压缩率是相当高的,并且更适合文本文件压缩。在哈夫曼算法中可以借助哈夫曼树构造编码体系,即使不使用字符区分符号,也可以构建能够明确进行区分的编码体系。接下来我们就通过制作AAAAAABBCDDEEEEEF编码的哈夫曼树的过程来理解怎样制作哈夫曼树,如图所示:
我们知道了哈夫曼算法的压缩过程,但为什么他能达到这么好的效果呢?这是因为从用哈夫曼算法压缩过的文件中读取数据后就会为单位,对该数据进行排查,并与哈夫曼树进行比较看是否到达了目标编码。还有一点值得提及这是我们把能还原到压缩前状态的压缩称为可逆压缩(GIF格式),无法还原到压缩前状态的压缩称为非可逆压缩(JPEG格式)。
标签:尝试,文件,哈夫曼,编码,压缩,算法,数据,亲自 From: https://www.cnblogs.com/G-y-l-123/p/18023711