10個手指能表示多少個數字?有效編碼的魔力,說出來你可能不信

編碼系統本身在信息論上是等價的,但是,不同的編碼系統可以有好有壞。比如今天使用的阿拉伯數字(其實是印度人發明的)0~9就是一個很好的編碼系統,對於描述數字信息來講,它們的數量不多不少,形狀差異大。

如果採用一個小圓點“∙”代表一,兩個“∙∙”代表二,三個“∙∙∙”代表三,十個“∙∙∙∙∙∙∙∙∙∙”代表十,就不太好,因為大家容易看花眼。因此好的編碼第一個特點就是要便於區分不同的信息。

10個手指能表示多少個數字?有效編碼的魔力,說出來你可能不信

1、信息編碼的原則:易識別

我國在文革後曾經推行過一版過於簡單的簡化字,但是很快就停止使用了,這裡面主要的原因是將漢字的筆畫簡化得過少後,使得近形字大量出現,不易辨識,非常容易搞混,因此很快就廢止了,從信息論上講,它違反了好編碼要便於信息辨識的原則。

上述原則在平時的表達和溝通中也很重要。比如說,德國著名的營銷專家和演說家多米尼克∙穆特勒提出的清晰表達的五個原則:明確、誠實、勇氣、責任和同理心,前四條就和信息編碼要便於識別有關。

“明確”原則這就不用說了,它是溝通的核心。只有意思表達得明確,才能保證對方不誤解。

很多專業文件都寫得像八股文,無論是病例,律師寫的法律文件,或者科學雜誌上的論文,都是如此,其最根本的目的就是要確保意思表達無誤,在同行中不會產生任何誤解。

“誠實、勇氣、責任”原則,也是輔助將想法明確表達出來的。“誠實”是能夠明確表述的基礎,因為口是心非,難免會語焉不詳。而“勇氣”則代表對一件事的態度確定,因為只有內心非常確定,表達才能明確。至於“責任”,說的是代表對一件事要有所謂,如果對一件事持無所謂態度,說出來的話就一天一個樣。

這就是今天要說的第一個重點,也就是信息編碼的第一個基本原則:“易識別”,應用在我們個人溝通中,也是如此。

10個手指能表示多少個數字?有效編碼的魔力,說出來你可能不信

2、信息編碼原則:有效

便於識別,不容易混淆只是編碼的第一個基本要求。作為一種好的編碼還需要做到“有效”。

在信息傳播上,只有當編碼有效時才能在短時間裡傳遞大量的信息。比如我們經常在諜戰片中看到通過發電報傳遞信息,電報的電文都非常簡潔,因為發報時間不能太長,否則很容易被對方發現,這其實符合有效性的原則。那麼怎樣做到有效編碼呢?我們先來看這樣一個問題:

用十根手指頭,能表達多少個數字?

很多人覺得能表達十個數字,因為我們平時數數就是這麼數的。也有人覺得可以表示100個數字,因為我們一個巴掌就能表示十個數字,將巴掌組合起來,一個表示個位,一個表示十位,就能表示從0到99共100個數字。這個想法非常好,能想到這層可以講是多少體會了編碼原理的精髓。

但是,這依然不是最有效的編碼,如果我們考慮採用二進制,而不是十進制進行編碼,則能表示1024個不同的數字。

具體的做法是這樣的,我們把十個指頭伸開:從左邊的小拇指到大拇指編號為0~4,再從右邊的大拇指到小拇指,編號為5~9。這十個指頭,每一個都有伸出、收起兩種狀態。每一種狀態對應於一位二進制,十個指頭能表示10位2進制,因為10個指頭,每個指頭有兩種情況,就是2的10次方,也就是1024種可能性。

10個手指能表示多少個數字?有效編碼的魔力,說出來你可能不信

當然你說,能不能讓每個手指具有伸開、半伸開和收縮三個狀態,表示59049,也就是3的10次方種種可能性呢?這種想法不能說有錯,但是並不好,

因為它過分強調有效性,而忽視了易辨識這個原則,凡事過猶不及。這是第二個信息編碼的原則:有效性。

3、什麼叫有效編碼

如何組合信息,保證它高效傳遞,還能不違背第一條“易辨識”的原則。這就需要我們主動思考了,下面有這樣一個現實的例子,看看能否啟發你。

利用上述兩個編碼原則,可以有效地進行生物和IT產品的實驗。硅谷的公司裡有這樣一道面試題:

有64瓶藥,其中63瓶是無毒的,一瓶是有毒的。如果做實驗的小白鼠喝了有毒的藥,3天后會死掉,當然喝了其它的藥,包括同時喝幾種就沒事。現在只剩下3天時間,請問最少需要多少隻小白鼠才能試出哪瓶藥有毒?

很多人看了這個題目從直覺出發,直接答64只,每一隻吃一種不同的藥。這麼做自然沒有問題,但是並不有效。能不能減少老鼠數量呢?你可以暫停10秒,自己思考一下。

好,要公佈結果了,實際上解決這個問題只要六隻小老鼠就可以了,這是一個64選1的題目,那麼需要的信息量就是log64,也就是6比特。

你要是想具體操作驗證,方法是這樣的:

10個手指能表示多少個數字?有效編碼的魔力,說出來你可能不信

看起來有點難懂,我們說明一下:

  1. 我們將這些藥從0~63按照二進制編號,獲得64個六位數的二進制編號,也就是從000000(六個零)到111111(六個一),每個二進制編號的最左邊是第一位,最右邊是第六位。
  2. 然後選六隻老鼠從左到右排開,和二進制的六位,從左到右地依次對應。文稿裡的二進制編號,你可以試著一位一位豎著看,下面每隻老鼠負責一位。
  3. 從左邊數第一個老鼠吃對應的二進制是1的藥,0就不吃。那麼老鼠1依次吃第32,33,34,……,63號藥。第二隻吃16,17,……,31,48,49,……,63號藥,等等。最後一隻老鼠吃1,3,5,……,63號藥。你可能注意到了,6只老鼠都吃了63號,那是因為63對應的二進制編號是6個1,所以6只都要吃。
  4. 吃完藥之後三天,某些老鼠可能死了,我們假定第1,2,6這三隻老鼠死了,剩下的活著。這說明什麼呢?說明編號110001號藥有問題,也就是在第1,第2,第6位上分別是3個1,因為這三隻老鼠都吃了它,而3,4,5這三隻沒死的老鼠沒有吃它(對應的位置為0)。而110001對應十進制的49,也就是說第49瓶藥是毒藥。
10個手指能表示多少個數字?有效編碼的魔力,說出來你可能不信

對於其它的組合也是同樣的,你可以自己隨便假定哪幾只老鼠死了,看看哪瓶是毒藥。當然,還有一種情況,就是所有的老鼠都沒有死,那說明第0號藥是毒藥,因為其他的藥都吃過了,就這一瓶沒有吃。

通過上述方式,可以用6只小老鼠一次完成64選1的任務。怎麼確定6只老鼠就足夠了呢?結合我們前面講到的理論,64選1的任務其實只需要log64=6,也就是6比特的信息就夠了,每一隻老鼠提供了一比特的信息。

因此,從理論上講6只小老鼠就足夠了,而有效的編碼,其實就是完成從理論上的上限到現實中解決方案的橋樑。所以IT公司在招收計算機工程師中會考這道題,因為很多的IT問題,就是編碼問題。

通過一道硅谷面試題,想傳達給你的第三個知識點,也就是有效編碼,其實就是讓理論最佳值在應用中落地。

不僅如此,有效編碼的思想在今天IT的產品性能比對測試中有直接的用途。

比如在一個產品中,有兩種可用的方案,A和B,哪種更好呢?過去常常是工程師們和產品經理們拍腦袋想,有些時候某些人的“眼光”很好,正好蒙對了,選了一個用戶也喜歡的方案,但是這種“眼光好”是無法複製的,

一個公司將自己的商業成功寄託在“眼光好”上早晚要失敗。

10個手指能表示多少個數字?有效編碼的魔力,說出來你可能不信

這時,就可以利用用戶大數據評判A、B方案的好壞,通常的做法是隨機選取1%的用戶作對比實驗。比如Google在改進搜索算法或者其它產品體驗後,會先做這樣不公開的測試,一般會持續一週左右。但是像Google這樣有好幾萬工程師的大公司,每天的各種改進是很多的,如果每個項目都用掉1%的用戶,把全部用戶都用上也不夠。

這就回到了我們剛才學過的高效編碼問題,用少量用戶同時進行很多個實驗的方法,就類似上面這種讓小白鼠試毒藥的方法,也就是將各種不會發生衝突的實驗用二進制進行編碼,幾組實驗者,就可以同時進行幾十個不同的實驗。


分享到:


相關文章: