数据压缩——有益无害(7)

这是一场灾难!我们使用更短的代码代表字母“e”和“t”的精巧计划,导致了一个根本不奏效的编码系统。幸运的是,再多使用一种把戏就能弥补。真正的问题是当我们看到数字8或9时,我们无从分辨它是一个一位数代码(不管是“e”还是“t”)的一部分,还是一个以8或9开头的两位数代码(如重读符号“á”和“è”等)的一部分。要解决这个问题,我们必须有所牺牲:一些代码实际上会变得更长。以8或9开头的清楚的两位数代码会变成三位数代码,但并不会以8或9开头。139页的图标展示了一种达成这一目的的特殊方法。一些标点符号也受到了影响,但最终情况良好:任何以7开头的数字都是三位数代码,任何以8或9开始的数字都是一位数代码,任何以0、1、2、3、4、5或6开头的数字都是和前面一样的两位数代码。因此,现在拆分数字13889的方法只有一种(13-8-8-9,代表“Meet”)——这也是用于其他任何正确编码的数字字符串。所有模糊性都被消除了,原始消息的新编码如下:

M e e t y o u r f i a n c é t h e r e .

138 8 9 0051414744003235274029782009 348 448 66

原始编码使用了46个数字,这次只使用了41个数字。这看起来也许只是节省了一点点,但如果是一条更长的信息,节省的长度就会非常明显。比如,本书文本(只有文字,没有图像)要求将近500 KB——50万字符——的存储空间。但在使用了刚刚描述的两种把戏压缩后,本书文本的体积减少到只有160 KB,不到原体积的三分之一。

总结:免费午餐来自何方?

现在,我们理解了创建计算机标准压缩ZIP文件背后的所有重要概念。下面是具体实施步骤:

步骤一:

计算机使用同前把戏传输未经压缩的原文件,让文件中绝大多数重复数据由短得多的指令取代,这些指令会返回并拷贝其他地方的数据。

读书导航