本章探討計算機科學中確定性與隨機性的關係。計算機最初是為了解決確定性問題而設計的,但很多確定性的問題需要利用隨機性來解決。理解隨機性,會讓計算機這個工具的能力倍增,特別是在大數據時代。

10.1 信息指紋:寓確定於隨機之中#

信息指紋(fingerprint)是一種將任何信息映射成一段二進制隨機數的技術,可以作為信息世界中任何對象的唯一標識。

基本原理#

  • 計算機中所有對象(文字、語音、視頻、圖片等)均以二進制數據存儲
  • 透過偽隨機數算法將信息映射到一個編號上,保證不同對象的編號不同
  • 任何兩段信息的指紋都很難重複,如同人類的指紋一樣

信息指紋重複問題#

  • 對於 128 位的信息指紋(如 MD5),可以表示約 3.4 x 10^38 個不同的數字
  • 根據斯特林公式和生日問題的原理,當信息指紋數量達到 k >= (1+sqrt(1+8N*ln2))/2 時,重複概率超過 50%
  • 128 位指紋的 k > 2^64,約 1800 億億次才會重複一次

應用場景#

  • 網絡爬蟲:用 64 位信息指紋替代網頁 URL,節省 90% 存儲空間,且加快比較速度
  • 文件比對:各自生成信息指紋進行對比,比直接對比文件內容高效得多
  • 密碼存儲:服務器只保存密碼的信息指紋,而非密碼原文,即使數據庫洩露也不會暴露原始密碼
  • 信息安全:公開密碼加密方式利用隨機性,讓試圖竊取密碼的人無法從密碼中倒推出原始明碼

要想確定兩條信息是否相同,不需要比較完整的信息,只需要比較它們的信息指紋就可以了。要想讓兩條不同信息的指紋不衝突,在產生信息指紋時,要確保其結果是隨機的。

10.2 隨機性和量子通信#

量子通信實際上是利用光的偏振特性傳遞一次性密鑰,再用一次性密鑰對信息進行加密。香農早已證明,只有一次性加密是完全無法破解的加密方式,而保證一次性密鑰安全傳輸的基礎恰恰是隨機性。

BB84 協議#

  • 發送端和接收端約定好兩組信息編碼方式(基),一組用垂直/水平偏振代表 1/0,另一組用 45 度/135 度代表 1/0
  • 發送端隨機選擇編碼方式發送信息,接收端隨機選擇解調方式
  • 解調方式與調制方式相同時,信息 100% 一致;不同時,信息有 50% 正確率
  • 最終約有 75% 的信息正確、25% 的誤碼率

安全性保證#

  • 如果信息被竊聽者截獲,竊聽者轉發的信息與原始信息的一致性會降到約 56%
  • 接收端通過確認一致性比例,可以判斷是否被竊聽
  • 發送端將調制使用的基(即哪些信息位設置對了)告知接收端,雙方選擇設置一致的信息位作為密鑰
  • 即便竊聽者知道收發雙方選用了哪些信息位作為密鑰,也不知道這些信息是什麼

量子密鑰分發的數學基礎是概率分布本身的穩定性,也就是說等概率的兩個隨機事件,在大量試驗後各自的概率大致相等;如果發現概率不等,說明背後一定出現了干擾。

10.3 置信度:成本與效果的平衡#

當一個算法已經是最優的,就不可能針對一般情況再全面優化,但可以考慮針對一些常見的特殊情況繼續優化。這種在特定置信度(Confidence Level)條件下的優化,是實際工程中非常重要的思維方式。

快速排序與「絕大多數情況」假設#

  • 快速排序最壞時間複雜度是 O(N^2),但「絕大多數」情況下是 O(NlogN),且常數係數比堆排序更小
  • 很多算法的改進都是基於「絕大多數情況」的假設,對個別極端現象不去考慮

AlphaGo 的兩個改進#

  • 縱向簡化:引入馬爾可夫假設,當前的一步棋只和後面有限步棋有關,而非整盤棋,大幅減少搜索的對弈可能性
  • 橫向簡化:在搜索時進行剪枝,剪掉博弈樹中不太可能的分枝,減小博弈樹的寬度
  • 維特比算法是一種在網格圖中尋找最短路徑的動態規劃算法,複雜度為 O(K^2*L)
  • 透過剪枝算法進一步改進:在每個時間點只保留 m 條候選路徑,複雜度降低到 O(mKL)
  • 隨著信息增加,可以越來越大膽地剪枝,保證 99.9% 甚至更高的置信度

求交集問題(Google 面試題)#

  • 如何找到同時包含兩個不同關鍵詞 X 和 Y 的網頁
  • 基準方法:合併兩個詞的索引,複雜度 O(L(X)+L(Y))
  • 利用隨機性的改進:假設出現某個詞的網頁編號具有分散性(scattering),可以跳躍式地查找同時包含兩個詞的網頁
  • 計算複雜度在 O(L(X^Y)) 和 O(L(Y)) 之間,Google 的搜索實際上就是這麼做的
  • 這種方法會錯失一些符合條件的網頁,但由於跳躍速度越來越快,優質網頁不太會被漏掉

當一個算法已經是最優的了,我們不可能針對一般情況再全面優化這個算法時,可以考慮針對一些常見的特殊情況繼續優化算法。三級以上的工程師常常需要做決策,決定如何平衡成本和效益的關係。

結束語#

  • 在大多數人的印象中,計算機總是和確定性相聯繫,但偶然性和隨機性才是這個世界的固有屬性
  • 在使用計算機解決問題時,通常會有一個理論上的最優算法,但在應用中,我們仍然有可能對某些特殊的情況進行進一步的優化
  • 特別是在資源有限時,從而更有效地處理大部分情況