閱讀前,建議可以參考Day1:閱讀指南&為何選擇這個題目?
題目:計算機概論X30天
挑戰內容:連續30天紀錄計算機概論、離散數學、演算法、資料結構等課程,還有自己學習程式的心得體悟。
本篇性質:適合任何對程式語言有興趣的人閱讀
在電腦的世界中,只有10101001,也就是true/false
而在之前的篇章中,我記錄了1001010這些鬼東西,是如何實現加法減法和乘法的。最後,就演變成現在如此複雜的計算機系統。
說實在,在一開始,也沒有人知道布林代數可以這樣用。又有誰會知道,這麼無聊的真假值運算,可以這樣改變世界?
直到1983年,香濃(Shaonnon)在他的碩士論文中,才指出布林代數可以用來做開關電路,因而開啟了布林代數改變世界的時代(香濃真的大天才)
回到搜尋引擎,搜尋引擎是如何幫你找東西的?
一般來說,當你在goolge引擎上搜尋任何關鍵字,在0.0幾秒,就可以得到結果。
這很厲害吧?但仔細想想,如果是在Enter關鍵字後,google才幫你掃描上億篇文章,這真的有可能在0.0幾秒就辦到呢?
因此「並不是打完文字才掃描文章」,而是google早就掃描好,並且在文章上貼上「索引(index)
」了。
比如說:
在搜尋引擎中搜索「狗狗」這個關鍵詞,在按下的那一刻,搜尋引擎只是就把具有「狗狗」這個索引的文章調出來。
假設N篇文章,搜尋引擎就會把有「狗狗」關鍵字就被標記為1,沒有就被標記為0
A:1001001101.....(以這串數字中為例,第一篇、第四篇文章表示有狗狗,第二、三篇表示沒有狗狗)
當伺服器收到使用者的要求後,資料庫只要把有「1」的文章調出來就可以了。
但如果要搜索的條件很多怎麼辦?
比如說,我想要搜尋「狗狗,但不是黃金獵犬」
難道Google會無聊到幫我在文章上標記「狗狗,但不是黃金獵犬」這個標籤嗎?
當然不會。誰這麼閒啊?
如果真的這樣做,使用者亂搜,那標籤不就用不完了(像是可能有人會搜「牛奶,但不是猴子」這種莫名其妙的的東西)
那怎麼辦呢?
很簡單,搜尋引擎會把它換成「狗狗&~黃金獵犬」然後進行布林運算。
比如說:
A:1001001101.....(N篇文章,只要有「狗狗」關鍵字就被標記為1,沒有就被標記為0)
B:1010000110.....(N篇文章,只要有「黃金獵犬」關鍵字就被標記為1,沒有就被標記為0)
那我們只要進行A&~B
的邏輯計算,再把為1的文章調出來就可以了!
因此,A&~B的結果就變成如下:
C:0001001001.....(N篇文章,只要有「狗狗&~黃金獵犬」關鍵字就被標記為1,沒有就被標記為0)
只要把是1的文章調出來,就會是「狗狗,但不是黃金獵犬」的結果了。
可是瑞凡,這樣資料還是很多啊?
搜尋引擎怎麼在0.0幾秒就找到我要的東西的?
這都歸功於——電腦做布林運算非常快
,一個週期可以進行32位運算,一秒數十億次。
因此,只要一開始對文章標好索引
之後再對不同關鍵字進行邏輯運算就很快了
吳軍・《數學之美》