supce's blog

关于编码(一)


从英文单词和汉字说起

世有万物,人类为了区分,给万物冠以不同的名称。英文单词由26个字母组成,对于天空,人们用字母s,k,y表示,即:sky;对于猫用c,a,t,表示,即cat;对于狗用d,o,t表示,即:dog。

这些名字都是随意的,没有什么原因说明为什么不把猫称为狗或不把狗称为猫。因此可以说英语词汇就是一种用26个符号(字母)进行的编码。
刚开始可以用几个字母,很短的单词来命名事物。随着已经约定事物的单词越来越多,后期事物的单词也越来越长。估计这也是很多自然事物的单词比较短,而一些近现代词汇比较长的原因吧。
汉字和英文单词有些不同。汉字最初是象形文字。通过模拟物体的形状来表示某一类物品。

随着不断的模拟,又从这些最初的象形文字归纳提炼出“点”、“横”、“竖”、“撇”、“捺”等笔画。然后再利用这些笔画进行组合,创立出不同的文字,用这些文字标记不同的物品。所以,也可以说汉字也是一种编码,甚至要比英文单词更加复杂,能够创立更多的组合。
比如下面表示太阳的“日”字。


由摩斯密码、盲文到二元编

由于应用场景的不同,人们对于信息的表示有着不同需求。字母可以通过写在纸上进行信息的传递,但是在有些场景不适合,比如说盲人或者电报机是无法识别纸质上的文字的。

摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。它的代码包括五种: 点、划、点和划之间的停顿、每个字符间短的停顿(在点和划之间)、每个词之间中等的停顿以及句子之间长的停顿。

点(.)和划(-),或叫“滴”(Dit)和“答”(Dah)

英文字母可以用下图表示:

为了便于识别(译码),树状图可能会更清晰:

摩尔斯电码被称为二元码(binary code),因为编码中仅含“滴”和“嗒”。这与一个硬
币很相似,硬币着地时只可能是正面或反面。二元事物(例如硬币)、二元编码(例如摩尔斯电码)常常用2的乘方来描述。

下面来解析下盲文,来看看它是如何工作的。我们并不是要真的学习布莱叶盲文,而且也无须刻意记住什么关于它的内容。我们仅仅希望从中窥探到编码的一些本质。

在布莱叶盲文中,每个在书写文字中用到的符号——具体来说就是字母、数字和标点符号——都被编码成为2×3的点码单元中的一个或者多个凸起的点。这个点码单元包含的点通常使用1到6的数字来编号。

下面我们约定:大点表示这是一个凸起的点,小点则表示其对应的位置是平的

对于6个位置,我们可以由2的6次方=64种组合。

对于26个字母表示法如下图:

甚至可以区分大小写————规定6号凸点为大写标识符,如果表示大写“B”,如下图:

大写字母标识符表示紧随它的字母(而且仅仅是紧随它的字母)应该被译为大写。类似这样的编码被称为“逃逸码”(escape codes)。逃逸码让你“逃离”对编码串单调的、一成不变的解析,而转入一种新的解析方式中。


二进制数

二进制数是由0,1两个数码表示数的。

让我们再回头看看之前提到的由点、划组成其间用空格分开的摩尔斯电码。摩尔斯电码看上去不像是由0和1组成的,但它确实是。

下面回忆一下摩尔斯电码的编码规则:划的长度等于点长度的三倍;单个的点或划之间用长度与点的长度相等的空格分开;单词内的各个字母之间用长度等于划的长度的空格分隔;各单词之间由长度等于两倍的划长度的空格分开。

为使分析更加简单,我们假设划的长度是点长度的两倍而不是3倍。也就是说,一个点是一个值为1的比特位,一个划是两个值为1的比特位,空格是值为0的比特位。

“bit (比特)”这个词被创造出来代表“binary digit”,它的确是新造的和计算机相关的最可爱的词之一。当然,“bit”有其通常的意义:“一小部分,程度很低或数量很少”。这个意义用来表示比特是非常精确的,因为1比特,一个二进制数字位确实是一个非常小的量。–《Code》

下面是之前的摩尔斯电码基本表:

我们可以将它转换为比特形式:

注意,所有的编码都以 1开头,以两个0结束。结尾处的两个零代表单词中各个字母之间的空格,单词之间的空格用另外的一对0来表示。

对于”code”这个单词,可以用11010110100110110110011010100100表示

用比特的形式表示布莱叶盲文比表示摩尔斯电码容易得多。例如,单词“code”可以用布莱叶盲文这样表示:

如果突起的点是1,平坦的点是0,则布莱叶盲文中的每一个符号都可以用6个比特的二进制代码表示。单词”code”中的四个布莱叶字母符号就可以简单地写成:

100100 101010 100110 100010

最左边的一位对应编号为1的位置,最右边的一位对应编码为 6的位置。

正如上面的例子,比特可以代表任何信息。但是,最基本的一点是:比特是数字。

当用比特表示信息时只要将可能情况的数目数清楚就可以了,这样就决定了需要多少个比特位(四个数目用两个比特位即可),从而使得各种可能的情况都能分配到一个编号。

比特在哲学和数学的奇怪混合物 — 逻辑 — 中发挥作用。逻辑最基本的目标是证明某个语句是否正确,而正确与否也可以用1和0来表示。

以上这些恰好是信息可以通过电信号进行传递的前提!