追光者

文章来源:基础软件国家工程研究中心 徐普 软件发展部 孔维一  |  发布时间: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. 必须有至少两种状态才能编码吗?只有一种状态不行吗?