追光者
文章来源:基础软件国家工程研究中心 徐普 软件发展部 孔维一 | 发布时间:2018-12-24 | 【】 【】
大家好,我是小徐。我最好的朋友是小程。我们两人的家在一条街的两边。事实上,我们的卧室窗户也彼此相对。每当夜幕降临,妈妈便早早地催促我关灯睡觉。但我仍然精神抖擞,想跟好朋友交谈分享。没错,交流本就是人的天性。
灯开着的话,我可以跟小程用肢体语言交流。然而灯关了,我和影子便没有区别。寝室里没有电脑也没有手机,我只能等月圆之夜跟小程对话了吗?不,我有一个绝妙的主意——我买了一个手电筒。
我想,我可以用光的闪烁来表示字。这有点像电影里大雾弥漫时的水手用灯的亮灭来发送信号。比如,我可以先用闪3次表示“我要开始说话了”,接着用闪1次表示“a”,闪2次表示“b”,闪26次表示“z”。我想告诉小程“bad”这个单词,我就可以依次闪3次、2次、1次、4次。怎么不让小程误解我是要说“bad”还是要说“g”呢?可以在每个字间加个小停顿,在单词之间可以加个大停顿。还有一件事需要做,就是把这些约定都告诉小明。
这样交流太累了,能不能改进一下?经过一番思考,我又买了五个同一型号的手电筒,从左到右摆成一排。现在,不同的手电筒被我赋予了不同的意义:最右端的亮时,用来告诉小程我要讲话了;其他五个的亮灭被我用来表示字母表。
表示字母表?对,我把字母表和有意义的停顿用“密码”写了下来。在下表中,我用0表示灭,1表示亮:
a |
00001 |
b |
00010 |
c |
00011 |
d |
00100 |
e |
00101 |
f |
00110 |
g |
00111 |
h |
01000 |
i |
01001 |
j |
01010 |
k |
01011 |
l |
01100 |
m |
01101 |
n |
01110 |
o |
01111 |
p |
10000 |
q |
10001 |
r |
10010 |
s |
10011 |
t |
10100 |
u |
10101 |
v |
10110 |
w |
10111 |
x |
11000 |
y |
11001 |
z |
11010 |
间隔 |
00000 |
空格 |
11111 |
? |
11011 |
! |
11100 |
|
|
|
|
这样一来,我想说“a good day”,就可以用手电筒依次排布出下列形式:
00001 00000 11111 00000 00111 00000 01111 00000 01111 00000
a 空格 g o o
00100 00000 11111 00000 00100 00000 00001 00000 11001 00000
d 空格 d a y
然后关闭所有手电筒。
我把这“密码表”告诉了小程,小程也买了六个手电筒,现在我们可以互相交流了。你看那夜空中一闪一闪的星星,也许隐藏着与我和小程两人相似的秘密。
现在让我们严肃一点,说清楚我们到底做了什么。我跟小程两个人想交换信息。我们想把语言文字的信息用光信号来传递,即信息的载体是光。我们借用光的变化来传递不同的信息。光的变化是由手电筒的亮灭控制的,这可以称之为手电筒的状态。亮灭是两种状态,一组状态按照顺序排列起来,表达特有的意义,这就叫做编码。我跟小明约定使用相同的编码来交换信息,可以说我们两人用了同一种信息交换协议。信息交换离不开编码与协议。
下面是人见人爱的提问环节:
1. 中文字用亮和灭两种状态应该如何编码呢?
2. 英文字母算不算是编码呢?英文单词算不算是编码呢?
3. 盲文是怎么编码的呢?
4. 中文是一种协议吗?是一种标准吗?协议和标准是一个意思吗?
5. 必须有至少两种状态才能编码吗?只有一种状态不行吗?