第1课:理清文件压缩的思路
■ 讲师:湖北 黄迎 漫画:张炜昱
数据压缩后,占用的磁盘空间肯定要比原来小。可是,为什么占用空间小了,却没有丢失任何数据呢?举一个简单的例子:我们知道,“国际奥委会”是“国际奥林匹克委员会”的简称,前者的字数大约是后者的一半,但是在语义表达上却不会产生误解,这是因为它保留了原句中重要的语素。同时,作为有思维能力的人类,我们可以根据前后词汇关系和以往的知识积累,推断出全称。电脑中的压缩也一样,它也是保留原数据中一些“关键点”,去掉了文件中的重复(冗余)信息,但不影响文件的基本使用。这就是文件压缩要遵循的整体思路。
实例1:找出文件中的“冗余”信息
大多数类型的计算机文件极为“冗余”—它们会重复列出相同的信息。文件压缩程序仅仅是去除这些冗余,对于重复的信息,它只列出一次。当原始程序中再次出现该信息时,就可以回头引用它。为了便于大家理解,我们来看一种大家都熟悉的信息类型——词汇。肯尼迪在1961年的就职演说中说了这样一句著名的话:
"Ask not what your country can do for you ——ask what you can do for your country."
这句引言有17个单词,61个字母,16个空格,一个破折号和一个句号。如果每一个字母、空格或者标点符号都占用一个存储单元,整个文件的大小就是79单元。为了降低文件大小,我们需要寻找冗余。
我们立刻就会发现:
★ “ask”出现了两次
★ “what”出现了两次
★ “your”出现了两次
★ “country”出现了两次
★ “can”出现了两次
★ “do”出现了两次
★ “for”出现了两次
★ “you”出现了两次
忽略字母的大小写,其中几乎一半是冗余的。9个单词——ask,not,what,your,country,can,do,for,you——几乎可以组成整个引言中我们需要的任何东西。为了构造短语的另一半,我们只需要指出该单词在第一半中的位置,并用空格和标点符号填充短语,就可以表达整个句子了。
小提示
因为数据压缩源于国外,所以压缩原理也是使用英文的例子。实际上,对于中文数据的压缩,工作的原理是一样的,只是中文的编码有所不同而已。
实例2:利用压缩原理作一个密码表
假如你和你的一个朋友经常要传递一些保密的文本文件(比如工资表),你当然可以使用一些加密工具来实现。不过还有一个操作简单而实用的方法——替换法。因为最为保密的内容往往是一些数字,我们可以利用替换法把其中的数字作一个伪装:打开编辑器的“替换”菜单,把其中的“1”替换成“很好”,“2”替换成“我们”,“3”替换成“对”……以此类推,所有数字都变成一堆中文。当然,利用文本编辑器的宏功能,还可以让替换工作自动完成,用起来就更方便了。替换原则只有你和朋友两人知道,这样即使有人截获了文件,对这些关键数字也会看得一头雾水!
第2课:字典—寻找数据位置“工具”
■ 讲师:旺旺
第1课中我们讲解了压缩文件遵循的基本思路,但如何能让这种思路具有可操作性,那还得来了解一下“字典”这个概念。字典的功能是什么呢?它实际上就像我们查字典一样,当我们需要记录一个词汇的时候,不需要知道它的全称,只要知道它在字典中所在的页码就可以了。
目前大多数压缩程序使用基于字典的LZ自适应式算法(关于压缩算法,我们会在第5课中详细讲述)的一种变体来压缩文件。“LZ”指的是Lempel and Ziv,即该算法的创始者,“字典”是指数据块的分类方法。编排字典的系统形式多种多样,它可能是一个简单的编号表。检查一下上面肯尼迪的这句名言,挑选出重复的单词,把它们放进编号索引中。然后只写下编号来代替整个单词。
如果我们的字典像下面这样:
1. ask
2. what
3. your
4. country
5. can
6. do
7. for
8. you
那么,我们的句子就成了这个样子:
"1 not 2 3 4 5 6 7 8 -- 1 2 8 5 6 7 3 4"
解压程序就是这样在你的电脑上释放下载文件的。使用该系统我们到底节约了多少空间呢?“1 not 2 3 4 5 6 7 8 -- 1 2 8 5 6 7 3 4”的确是比原来的句子短,但实际上我们还要节约文件连同字典本身的长度。
在实际压缩方案中,确定合适的字典内容是相当复杂的。每个字符和空格占一个存储单元,整个短语占79个单元。压缩的句子(包括空格)占37个单元,词典(单词和编号)也占37个单元。这样,文件大小为74个单元,因此文件大小并没有减少多少。
但是这只是一个句子!你可以想象,如果压缩程序对肯尼迪演讲余下的部分进行处理,它还会发现上述单词和另外一些重复更多次的单词。那样,节省的空间就会成倍提高!
实例1:字典文件大小与压缩率的关系
我们利用字典查某个生僻字,如果字典提供的文字越多、查询方案越多,那么我们查找成功的可能性和查找效率就会更高。同样,不管我们使用何种压缩软件,一般来说,选择的字典文件越大,则可以获得更高的压缩比。很多压缩软件提供了字典文件的自定义功能,如果你想获得更好的压缩效果,可以选择较大的字典文件来进行压缩。具体我们将在第5课中提到。
你知道吗?
文件压缩的原理就是在文件的头部做一个类似字典的东西,把一些重复词汇放在“字典”中,并为这个词指定一个占较少字节数的编码。有时候,当硬盘数据被删除后,我们用恢复软件(如FinalData等)可以恢复一些压缩文件,然而文件已经无法使用,这就是因为文件头的“字典”信息已经破坏,所以无法恢复。
如果你经常恢复一些被删除的硬盘文件,你就会发现图片文件很容易恢复成功,而且恢复后大多完好无损。这是因为图片文件的存放方式和一般的文字类文件不同。文字类文件可能会被分成若干块,保存在硬盘的各个位置,而图片文件则必须在硬盘扇区上连续存储,因此就比较容易“存活”。
实例2:修复字典文件被损坏的ZIP、RAR文件
我们在利用WinRAR或者WinZip解压某个软件时,如果获得RCR校验错误等信息,多是由于病毒、下载等原因引起的压缩文件头部丢失文件目录列表、压缩字典文件损坏而引起的,我们可以利用专门的修复软件来修复,如WzipFix,它的下载地址为:http://www.onlinedown.net/soft/21077.htm。运行后,分别单击软件主界面上的“打开”和“保存”按钮,选择要修复的文件以及修复后保存的目录,单击“修复”即可。(见图1)
|