追光者
文章來源:基礎軟件國家工程研究中心 徐普 軟件發展部 孔維一 | 發布時間: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. 必須有至少兩種狀態才能編碼嗎?只有一種狀態不行嗎?