傳紙條被發現,一看竟寫著...

薩繆爾·摩爾斯 電腦 通信 英語 中科院物理所 2019-04-06

不知道大家以前有沒有用過 / 見過這個玩意...

傳紙條被發現,一看竟寫著...

小編小時候寫的一本筆記一直保存到了現在...

當年偷偷寫的日記和小祕密,為了防止被同學老師家長偷看,都寫在這樣的本子裡面。這種本子的密碼少則四五位,多的有七八位,除非知道這個密碼鎖的密碼,不然根本無法打開。

上學的時候誰又沒有在課上偷偷地傳過小紙條呢?可能很多人還挺享受那種在老師眼皮子底下偷偷摸摸說悄悄話的快感。其實說起來,這種「傳紙條」應該也算是大家最早的對保密通訊的需求了。為了防止傳紙條的途中被其它同學截獲獲取裡面的內容,可能有的人還要用密碼來加密一下。

傳紙條被發現,一看竟寫著...

傳紙條前記得確認一下...

從通信的角度來講,一個好的編碼方案可以在有效傳輸信息的同時大大降低傳輸所需要的代價。怎麼才能科學地理解通信和編碼,以下小編將從字符編碼的角度來介紹幾種歷史上著名的編碼方案以及信息熵的概念。

摩爾斯電碼

Morse Code

1837 年,美國人塞穆爾·摩爾斯 (Samuel Morse) 發明了電報,並和艾爾菲德·維爾 (Alfred Ville) 一起,共同發明了一套電碼以供電報配套使用。這套電碼就是赫赫有名的摩爾斯電碼(Morse alphabet)。

這種古老而簡單的信號代碼主要由兩種基礎信號組成:短促的電信號「·」(讀作「嘀」)和保持一定時間的長信號「 —」(讀作「嗒」)。電影電視劇裡勤奮的發報員每天嘀嘀嗒嗒響個不停就是在發電報。

傳紙條被發現,一看竟寫著...

勤奮的發報員在發電報

按照點碼錶所列出的組合,摩爾斯電碼可以構成不同的字符,比如字母、數字和常用的標點符號:

傳紙條被發現,一看竟寫著...

摩爾斯電碼表

這些字符串連起來就組成了單詞,單詞串連變成句子。

每個不同的單位之間需要一定的停頓時間,否則就會引起歧義。比如“h”是“····”,而“i”是“··”,如果沒有停頓,連續兩個“i”就會是“····”,跟“h”就混淆了。

不同單位之間停頓的時間不相同。嘀=1t,嗒=3t,嘀嗒間=1t,字符間=3t,單詞間=7t。

傳紙條被發現,一看竟寫著...

簡易電報機

著名的國際通用海灘求救信號就是採用摩爾斯電碼,運用燈光(比如手電筒)向遠處發射三短三長三短的光,即“··· ——— ··· ”。換成對應的字母也就是“SOS”。至於為什麼要採用這樣的一組光——當然是因為最簡單最容易辨識啊!

傳紙條被發現,一看竟寫著...

閱後作業:請對小編說出以下摩爾斯電碼的解碼文:

·—·· ·· ···· ·— ·· ·—·· ·

ASCII 碼

ACSII Code

20世紀,隨著計算機的誕生,編碼在應用階段上獲得了迅速的發展。由於笨笨的計算機只能存儲二進制數(高電平為1,低電平為0),人們決定開發一套通用的二進制編碼規則來相互通信。

傳紙條被發現,一看竟寫著...

就這樣,由美國國家標準學會制定的 ASCII (美國信息交換標準代碼,American Standard Code for Information Interchange) 應運而生。

ASCII 碼能夠用 7 個比特來表示不同的字符。每個 bit 可以有 0 和 1 兩種狀態,因此 7 位二進制數能夠表示 128 種不同的字符,也就是表中的前面 0~127 種。裡面包含了所有英文文字表達所需要的字符,英文國家們表示很滿意。

但這遠遠不能滿足廣大的非英文國家的需求。他們表示很不開心並增加了一個比特的位置,佔領了後面的 128 個空位。於是,從 128 到 255 的這 128 個字符被用來表示他們的字母、符號和形狀,這些被稱為「擴展字符集」

傳紙條被發現,一看竟寫著...

圖中碼值為十進制形式,計算機裡的形式是對應的二進制數

即使後來產生了各種花裡胡哨的計算機編碼規則,ASCII 碼以其優秀的實用性,仍然保留了下來。它通常保留在各種編碼規則的最開頭,佔據最前面的 128 個位置。

在人看來非常簡單的單詞,在計算機眼中就變成了一大堆 0 和 1 的組合。當然,由於計算機擁有強大的處理能力,這些數字也並不成問題。

傳紙條被發現,一看竟寫著...

閱後作業:參考下圖,解碼以下 ASCII 碼文(一行一字):

01101110 01101001

01101000 01100101 01101110

01111001 01101111 01110101

01111000 01101001 01110101.

傳紙條被發現,一看竟寫著...

GBK 標準

Chinese Internal Code Specification

後來,計算機終於來到了中國人民的手中。然而,大家發現 ASCII 碼的 256 個坑位已經全部被佔用了。

但漢字總不能都用拼音表示吧,廣大 l n 不分的南方人民表示不同意。。。

於是,優秀的中國選手自己制定了一套叫做 GBK(漢字內碼擴展規範)的編碼方案,用兩個字節來表示一個漢字。

傳紙條被發現,一看竟寫著...

對於當時的計算機而言十分複雜的漢字 @井口皓太

這套規則兼容了前面的一些編碼方案,用後面空餘的位置收錄了 21003 個漢字,日常使用完全夠夠的了~

不過,當時想要在電腦上顯示漢字,就必須裝上一個漢字系統。而當時的大多數人對電腦仍然是一竅不通的,回去裝系統發現全是 bug 而且看都看不懂。。。

傳紙條被發現,一看竟寫著...

而且,不同的國家都開發了一套自己的編碼方案和文字系統,導致不同國家的人之間無法互相通信。因此他們制定了一套統一的編碼規則——Unicode

Unicode 碼

Unicode

Unicode 又稱萬國碼、統一碼,為解決傳統字符編碼方案的侷限而產生。聽起來就很厲害有沒有!

傳紙條被發現,一看竟寫著...

它把所有語言的字符都統一到一套公用的編碼,有一百萬多種字符,就像是一部世界語言通用字符字典。因此,在 Unicode 中,一個字符需要用三個字節來表示

像一些簡單基礎的字符,比如 a、b、c 等等,1 個字節就能夠表示了。但是按照 Unicode 的規則,計算機必須再讀取兩個空字節填充在高字節位。比 GBK 多 1 個字節,比 ASCII 多 2 個字節。。。

所以這個神級裝備還不如新手裝備的嗎。。

傳紙條被發現,一看竟寫著...

用來擴展字符編碼的 Unicode 在處理一些簡單的字符時遇到了麻煩 @葉天宇yetianyu

於是,智慧的人們不堪其辱地研發了 UTF-8 這種專門針對 Unicode 的可變長度編碼。它將Unicode 編碼進行再編碼,再進行傳輸,可以自動變長節省空間。

UTF-8 也成為現在程序猿們鍾愛的一種編碼形式啦~

信息熵

Information Entropy

在上面的內容中,我們介紹了很多編碼的內容。但是同一份內容,無論用什麼編碼來進行「敘述」,其本身所包含的信息應該是不變的。

傳紙條被發現,一看竟寫著...

信息,時間與知識 @ alcrego

在信息論中,人們使用(entropy)來度量接收到的每條消息中包含的信息的平均量,這也被稱為信息熵、信源熵等。這裡的「消息」其實已經不是我們日常發條微信,發條語音的那種消息了,而是可以更廣泛地理解為一件事情發生的概率分佈,或者數據中的事件、樣本或者特徵。

傳紙條被發現,一看竟寫著...

和熱力學裡面的熵類似,這裡的信息熵同樣可以理解為對不確定性的一種度量,因為一個消息來源越隨機,那麼它的熵就越大。就像投擲一枚硬幣,其正反面出現的概率都相同,那麼這時候它的熵就最大。反之,如果這枚硬幣很特殊,它的正面更重一些,因此在投擲以後,它正反兩面出現的概率不再一致,它的熵就會減小。這裡的想法很簡單,因為正反兩面概率不再一致,這裡發生了以前不會發生的事情,給我們提供了更多的信息,減少了不確定性。

傳紙條被發現,一看竟寫著...

拋一枚硬幣決定生死,雖然人們總想要在消除不確定性以後往好的那一面發展,但現實卻不一定。。。

在很多人見到信息熵的定義的時候一定都會有疑惑,明明是挺簡單的一個概念,為啥計算的公式這麼複雜呢?又是對數又是相乘還要求和。

信息熵計算規則

How to calculate entropy

其實藏在這個公式的背後的假設非常簡單:1. 信息熵的單位。2. 可加性。

無論怎麼定義信息熵,我們都需要一個單位。一般情況下我們選取的單位為 bit,比特。也就是 H2(1/2, 1/2) = 1。實際上,信息熵的定義函數對於連續性也有一定的要求。對系統施加微擾,假設拋一枚硬幣正面朝上的概率變為了 0.50000001,而反面朝上的概率變為了 0.49999999。那麼此時拋硬幣這件事情包含的信息熵應該還是約為 1 bit。而不會變成 2 bit 或者其他的數值。用數學化一點的語言來說就是,H2(p, 1-p) 是關於 p 的連續函數。

傳紙條被發現,一看竟寫著...

丟兩枚硬幣的情形

在有了信息熵的單位以後,我們還需要知道不同系統之間的信息熵是怎麼相加的,就像小時候學加法的時候老師教小朋友 2 個蘋果加 3 個蘋果等於幾個蘋果一樣。只不過這裡關於信息熵的「加法公式」,會稍微比起 2 + 3 = 5 麻煩一點點。

傳紙條被發現,一看竟寫著...

我們需要明確不同系統之間的信息熵是怎麼計算的

對不同系統的信息熵進行求和的過程可以這麼理解,還是用拋硬幣這個例子,只不過我們這時候要拋兩個硬幣了。當然,我們希望信息熵的定義能夠保證這時候對應的為 2 bit。那麼能不能做到呢?我們先完全不管第一枚硬幣的正反結果,因為對於第一枚硬幣的情況一無所知,那麼這時候的系統其實就相當於只拋一枚硬幣了,當然此時的信息熵就是 1bit。此時我們再單獨看第一枚硬幣帶給我們的信息熵,其同樣為 1bit。所以在信息熵的定義過程中,要讓其具有系統的可加性。也就是

Hm(p1...pm) = Hm(p1+p2, ...pm) + p H2(p1/p, p2/p)

其中 p = p1 + p2.

在有了這兩條以後,我們就能推導出信息熵的公式只能是上面對數的形式了。[6]

那些說不完的祕密

Other Interesting Stories

熵的故事其實最早要從物理上開始說起,其度量了分子的微觀狀態的混亂程度。

傳紙條被發現,一看竟寫著...

何謂「混亂」?

在信息的世界中,熵越高,其可能性越多,則能傳遞越多的信息;熵越低,其可能性越低,則能傳遞的信息越少。比如你說了一句話,「今晚夜色真美」,裡面包含了很多的可能性,熵比較高,我們一般就可以說這句話「信息量很大」。

不過我們日常生活中對於信息,或者信息量很大還有另外一種理解。熵是對不確定度的度量,獲取信息等於消滅熵。就像你讀了「中科院物理所」推送的文章一樣,學到了很多東西,信息量很大。這個其實並不是說我們文章模稜兩可,充滿了可能性,而是在說你心裡對一些事物是比較模糊的,在閱讀完文章以後,消滅了這種模糊性,獲得了信息。

回到我們前面敘述的那麼多編碼中來,一段數據經過編碼以後被無損地壓縮了,信息不變,但是長度變短了,這也就意味著我們更難預測每個字符的下一個字符,因此它的信息熵會增加。因為一個固定長度的消息其信息熵有上限,這也就是說消息壓縮存在著上限,我們不能無限制地對消息進行壓縮

傳紙條被發現,一看竟寫著...

如果不斷地用壓縮軟件去壓縮一個文件,我們甚至會發現壓縮包會變得越來越大。

在信息熵的背後還有點小故事。在香農提出這個概念以後,馮諾依曼發現了其與物理學上的熱力學熵概念存在相同之處,從而建議香農取名為「信息熵」。不過也有傳聞說取這個名字的理由是這個熱力學名詞別人不懂,容易被唬住。[7]

* 圖片均來源於網絡

* 參考文獻與鏈接:

[1] 摩斯密碼到底是怎麼回事?普通人能學會嗎?

[2] 百度百科 - ASCII碼

[3] 最為透徹的utf-8、unicode詳解

[4] Unicode 編碼理解

[5] 字符編碼的故事

[6] 關於這中間推導的細節詳見 Handout Mode 的 Application of Information Theory, Lecture 1, Basic Definitions and Facts,該文檔裡面還介紹了信息熵定義的其它一些性質以及證明。Witten 在去年也寫過一個關於信息熵和信息理論的簡短介紹(A Mini-Introduction To Information Theory),裡面有和物理聯繫的更緊密一些的例子,並介紹了信息熵量子化的版本和應用,詳見arXiv:1805.11965

[7] Information Entropy - wikipedia

編輯:Cloudiiink

傳紙條被發現,一看竟寫著...

近期熱門文章Top10

↓ 點擊標題即可查看 ↓

1. 物理定律告訴你,愛情的真相有多麼殘酷!

2. 玉皇大帝到底住在平流層還是對流層?

3. 玻璃球裡的花紋是怎麼弄進去的?看完童年之謎終於解開了

4. 不要模仿!把兩顆葡萄一起放進微波爐 ,能燒得你家都沒了

5. 仰望星空100年

6. 不知道這些,別說你看懂了《流浪地球》

7. 如何批量製造鑽石

8. 楊-米爾斯理論說了啥?為什麼說這是楊振寧超越他諾獎的貢獻?

9. 怎麼避免上廁所沒有紙?看完這篇文章你就懂了

10. 牛頓棺材板壓不住時,請祭出此物防身!

相關推薦

推薦中...