《编码的奥秘》笔记

第一章 电筒密谈

 

10岁小孩与朋友之间通过手电筒通信:

1. 用光画出字母(缺点:光画出的圈圈杠杠太不准确了)。

2. 字母表的每个字母与一定数目的闪烁相对应,词间的停顿比字母间的停顿时间要稍长一些(优点:不需要挥舞手电筒而是对准某一方向按开关;缺点:需要闪烁的次数过多)。

3. 莫尔斯电码(morse code),长闪烁和短闪烁,点(dot)和划(dash),易于在印刷品上表示。用光通信的时候,10岁小孩的世界里,莫尔斯电码可以让他们达到每分钟接收5~10个单词,虽然仍比交谈慢(交谈大概每分钟100个词左右),但是已经够用了。

图1 手电筒

图2 莫尔斯电码(morse code)

摩尔斯电码由萨缪尔·摩尔斯(1791-1872)发明

 

什么是编码?

编码或代码(Code)通常指一种在人和机器之间进行信息转换的系统(体系)。
换句话说,编码便是交流。有时我们将编码看成是密码(机密),其实大多数编码并不是的。大多数的编码都需要被很好地理解,因为它们是人类交流的基础。

 

编码的例子

1. 英语词汇就是一种编码。
2. 用口发音的单词,被称为“口头语言”或“语音”。
3. 对写在纸上(或凿在石头上、刻在木头上或通过比划写在空气中)的词,还有一种编码方式,那就是我们在印刷的报刊,杂志和书籍上看到的字符,称之为“书面语言”或“文本”
4. 对盲人来说,他们可以使用布莱叶盲文(Braille)。这种文字使用凸起的点代表字母,字母串和单词.
5. 手势语言的发明帮助了聋哑人进行面对面的交流。这是一种用手和胳膊的动作组合来表达词语中的单个字母、整个词及其基本概念的语言。

 

对编码的深入理解:

    相互沟通时使用了各种不同的编码的原因:因为在不同的应用场合,其中的一些较其他的更为简便。
    例如,语言不能在纸上存储,所以使用了文字;语言、文字不适合用来在黑夜中安静地传递消息,故摩尔斯电码是一个方便的替代品。只要一种编码可以适用于其他编码所不能适用的场合,它就是一种有用的编码。


    计算机中使用了不同的编码来传递和存储数字、声音、音乐、图像和视频(电影)。
    计算机处理信息都要求使用它们自己的编码方式,正如交谈需要使用人的某些器官(嘴和耳朵),而书写和阅读则需要使用另外一些器官(手和眼睛)一样。

 

第2章编码与组合

 

莫尔斯电码解码问题

    接收摩尔斯电码并将其翻译回单词比发送费时费力多了,因为译码者必须反向地将已编码的“滴-嗒”序列与字母对应。例如,在确定接收到的字母是“ Y”之前,必须按字母逐个地对照编码表。

    问题是我们仅有一张提供“字母→摩尔斯电码”的编码表,而没有一张可供逆向查找的“摩尔斯电码→字母”译码表。

 

解码问题的抽象:
仅包含一个"滴"或"嗒"的莫尔斯电码序列之可能代表E或T这两个字母之一
.    E
-    T
两个“滴”或“嗒”的组合则代表了4个字母I、A、N、M:
..    I    -.    N
.-    A    --    M
三个“滴”或“嗒”的序列代表了8个字母:
...    S    -..    D
..-    U    -.-    K
.-.    R    --.    C
.--    W    ---    O
最后(如果不考虑数字和标点符号的摩尔斯电码),四个“滴”或“嗒”的序列则共代表了16个字母:   

图3 四个“滴”或“嗒”的序列


解码表的规律

    四张表共包括2 + 4 + 8 + 16 = 30个编码,可与30个字母相对应,比拉丁字母所需的26个字母还多了4个。出于这个原因,在最后一张表中,你可能注意到有4个编码与重音字母相对应。
    在翻译别人发送的摩尔斯电码时,上面4张表提供了极大的便利。当你接收到一个代表特定字母的码字时,按其中含有的“滴”“嗒”个数,至少可以跳到其对应的那张表中去查找。
    每张表中,全“滴”的字母排在左上角,全“嗒”的字母排在右下角。
    你注意到4张表大小的规律了吗?每张表都恰好是其前一张表的两倍大小。这其中包含的意义是:前一张表的码字后加一个“滴”或加一个“嗒“,即构成了后一张表。
    可以按下面的方式总结这个有趣的规律:
点划数码字数
1     2
2     4
3     8
4     16


四张表中每张码字数都是前一张的两倍,那么如果第一张表含2个码字,第二张表则含2×2个码字,第三张表2×2×2个码字。以下是另一种表达方式:
点划数码字数
1     2
2     2×2
3     2×2×2
4     2×2×2×2


当然,如果遇到数的自乘,可以用幂表示,例如2×2×2×2可以写成24。数字2、4、8、16分别是2的1、2、3、4次幂,因为可以用依次乘2的方法将它们计算出来。由此我们的总结还可以写成下面的方式:
点划数码字数
1     2^1
2     2^2
3     2^3
4     2^4

这张表简单明了,码字数是2的次方,次方数目与码字中含有的“滴”“嗒”数目相同。
我们可以把表总结为一个简单的公式:
码字数= 2^(“滴”与“嗒”的数目)

 

 

为了使译码的过程更为简便,可以画出如下一张树形图:

图4 莫尔斯电码解码规律树状图

 

解码表的扩展

     我们可以加长码字至5位或更长, 5位长的码字又提供了额外的32(2×2×2×2×2)或25个码字。一般而言,这就足够10个数字和16个标点符号使用。实际上,摩尔斯电码中的数字确实是5位的,但在许多其他编码方式中, 5位码字常用于重音字母而不是标点符号。
    为了包含所有的标点符号,系统必须扩充至6位表示,提供6 4个附加编码,此时系统可表示2 + 4 + 8 + 1 6 + 32 + 64共126个字符。这对摩尔斯电码而言太多了,以至于留下许多“未定义”的码字。此处“未定义”指不代表任何意义的码字,如果在你接收的摩尔斯电码中有未定义的码字,就可以肯定发送方出了差错。
由于推出了下面这条公式:
码字数= 2^(“滴”与“嗒”的数目)
我们就可以继续导出更长的码字位数所代表的码字数目。很幸运,我们不必为确定码字数目而写出所有可能的码字,我们所要做的不过是不断地乘2而已:
点划数码字数
1     2^1 = 2
2     2^2 = 4
3     2^3 = 8
4     2^4 = 16
5     2^5 = 32
6     2^6 = 64
7    2^7 = 128
8     2^8 = 256
9     2^9 = 512
10     2^10 = 1024
    摩尔斯电码被称为二元码(binary code),因为编码中仅含“滴”和“嗒”。这与一个硬币很相似,硬币着地时只可能是正面或反面。二元事物(例如硬币)、二元编码(例如摩尔斯电码)常常用2的乘方来描述.
    上面所做的对二元编码的分析在数学上的一个分支—组合学或组合分析里只能算是一个简单的练习。传统上,由于组合分析能够用来确定事件出现的几率,例如硬币或骰子组合的数目,所以它常用于概率统计,但它也同样有助于我们理解编码的合成与分解。

你可能感兴趣的:(Programming)