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

第136页的表格给出了一个完整列表,列出了计算机也许想存储的100个符号以及每个符号对应的两位数代码。顺便说一下,这个特别的两位数代码集并没有在任何现实计算机系统使用,但与现实生活中使用的代码相当相似。两者的主要区别是,计算机并不使用人类使用的十进制数系统。相反,也许你知道,计算机使用一个不同的数位系统,这个系统被称为二进制系统。不过,这些细节对我们来说并不重要。更短符号压缩把戏同时对十进制和二进制数系统奏效,因此我们假装计算机使用十进制,以使接下来的解释更容易。

仔细看看这张符号表。

注意表的第一项给出了字与字之间空格的数

原注:答案是字母A重复251次。字代码“00”。接下来是从A(“01”)到Z(“26”)的大写字母,以及从a(“27”)到z(“52”)的小写字母。再接下来是标点符号,最后一栏中收录了一些书写非英语单词用到的字符,从á(“80”)到ù(“99”)。

那么计算机该如何使用这些两位数代码存储“Meet your .ancé there”(去那见你的未婚夫)这句话呢?很简单:只要将每个字符翻译成对应的数字代码并串联在一起:

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

13 31 31 46 00 51 41 47 44 00 32 35 27 40 29 82 00 46 34 31 44 31 66

在计算机中,数字对之间是没有间隔的,认识到这一点很重要。因此,这条消息实际上被存储为一个46位数的持续字符串:“1331314600514147440032352740298200463431443166”。当然,人类解读这个字符串有点难,但对计算机来说却轻而易举。在将数字翻译成字符显示在屏幕上之前,计算机能轻易将数字分成对。关键是在如何分开数字代码上没有歧义,因为每个代码都只是用两个数字。事实上,这也是A用“01”而不是“1”代表的原因。同理,B是“02”而不是“2”,一直到字母I(“09”而不是“9”)。如果我们选择让A=“1”,B=“2”,依此类推,根本就不可能清楚地翻译消息。比如,消息“1123”可以拆成“1 1 23”(翻译为AAW),或“11 2 3”(KBC)或“1 1 2 3”(AABC)。因此,请记住这一重要思想:数字码和字符之间的翻译必须清楚无异议,即便代码在没有空格的情况下彼此相邻地存储。我们马上就要为这个问题感到头痛!

读书导航