核心概念#
本章闡述搜索引擎的「道」——其原理歸結為三件事:下載、索引、排序。而這一切的數學基礎,就是極其簡單的布爾代數。
1. 布爾代數#
- 世界上最簡單的計數方法:只有 0 和 1 兩個數字
- 二進制歷史悠久:中國的陰陽學說是最早的雛形;印度學者在公元前完成二進制計數系統;萊布尼茲(Leibniz)在 17 世紀完善了現代二進制
- 布爾(George Boole)是 19 世紀英國的中學數學老師,1854 年出版《思維規律》,首次展示如何用數學方法解決邏輯問題
- 布爾代數只有三種基本運算:
- AND(與):兩個都為 1 結果才是 1
- OR(或):有一個為 1 結果就是 1
- NOT(非):將 1 變 0、0 變 1
- 布爾代數提出後 80 多年幾乎沒有實際應用,直到 1938 年香農在碩士論文中指出用布爾代數來實現開關電路,才使其成為數字電路的基礎
布爾代數對於數學的意義,等同於量子力學對於物理學的意義——它們將認識從連續狀態擴展到離散狀態,將邏輯和數學合二為一。
- 文獻檢索與布爾運算的關係:對於使用者的查詢關鍵詞,搜索引擎判斷每篇文獻是否包含該關鍵詞(TRUE 或 FALSE),再用布爾運算組合條件
- 例如查詢「原子能 AND 應用 AND (NOT 原子彈)」,就是對每篇文獻的三個條件做布爾運算
2. 索引#
- 搜索引擎能在零點幾秒內從上萬至上億結果中找到答案,關鍵技巧是建索引
- 最簡單的索引結構:用二進制數表示每個關鍵字是否出現在每篇文獻中,1 代表有、0 代表沒有
- 由於絕大部分位數都是零,只需記錄為 1 的位數,索引就變成一張大表:每個關鍵詞後面跟著包含它的文獻序號
- 計算機做布爾運算極快,現在最便宜的微機每秒可進行數十億次 32 位布爾運算
- 索引規模巨大(互聯網 100 億網頁、30 萬詞彙表,索引量級達 30 萬億),需要分布式存儲,將索引分成多份(Shards)存在不同伺服器中
- 根據網頁的重要性、質量和訪問頻率,建立常用和非常用等不同級別的索引
不論搜索引擎的索引在工程上如何複雜,原理上依然非常簡單,即等價於布爾運算。牛頓的話最好地總結了這個精神:「真理在形式上從來是簡單的,而不是複雜和含混的。」
本章小結#
布爾代數雖然極其簡單,卻是搜索引擎和整個數位世界的數學基石。它將邏輯和數學合二為一,體現了「簡單之美」的核心精神。