數學之美 第八章摘要(布林代數和搜尋引擎)

2021-10-08 19:51:53 字數 1412 閱讀 5082

介紹搜尋,從索引出發

德國的數學家萊布尼茲完善了二進位制,用0和1表示它的兩個數字,成為今天使用的二進位制

布林代數十分簡單,運算元素只有1(true,真)和0(false,假),基本運算只有與(and)、或(or)、非(not)三種,後來發現都可以轉換成與非(and-not)一種運算

什麼是搜尋引擎:好的回答是拿圖書館的索引卡片做模擬。每個**就像圖書館裡的一本書,我們不可能在圖書館書架上一本本地找,而是要通過搜尋卡片找到它的位置,然後直接去書架上拿

圖書館的索引卡片當然無法進行複雜的邏輯運算。但是,當資訊檢索進入計算機時代後,圖書的索引便不再是卡片,而是基於資料庫的。資料庫的查詢語句( sql)支援各種複雜的邏輯組合,但是背後的基本原理是基於布林運算的,至今如此。

最簡單的索引結構是用乙個很長的二進位制數,表示乙個關鍵字是否出現在每篇文獻中。有多少篇文獻,就有多少位數,每一位對應一篇文獻, 1代表相應的文獻有這個關鍵字,0代表沒有。比如關鍵字「原子能」對應的二進位制數是0100100011000001…表示第

二、第五、第

九、第十、第十六篇文獻包含這個關鍵字。上述過程其實就是將一篇千差萬別的文字進行量子化的過程。注意,這個二進位制數非常之長。同樣,假定「應用」對應的二進位制數是0010100110000001…那麼要找到同時包含「原子能」和「應用」的文獻時,只要將這兩個二進位制數進行布林運算and。根據上面的真值表,可知結果為0000100000000001…表示第五篇、第十六篇文獻滿足要求。

假如網際網路上有100億3( 1010)個有意義的網頁,而詞彙表的大小是30萬(也是保守估計的數字),那麼這個索引的大小至少是100億x30萬= 3 000萬億。考慮到大多數詞只出現在一部分文字中,壓縮比為100 : 1,也是30萬億的量級。為了網頁排名方便,索引中還需存有大量附加資訊,諸如每個詞出現的位置、次數,等等。

顯然,這不是一台伺服器的記憶體能夠存下的。所以,這些索引需要通過分布式的方式儲存到不同的伺服器上。普遍的做法就是根據網頁的序號將索引分成很多份(shards),分別儲存在不同的伺服器中。每當接受乙個查詢時,這個查詢就被分發到許許多多的伺服器中,這些伺服器同時並行處理使用者請求,並把結果送到主伺服器進行合併處理,最後將結果返回給使用者。

因此,需要根據網頁的重要性、質量和訪問的頻率建立常用和非常用等不同級別的索引。常用的索引需要訪問速度快,附加資訊多,更新也要快;而非常用的要求就低多了。但是不論搜尋引擎的索引在工程上如何複雜,原理上依然非常簡單,即等價於布林運算。

第八章 指標 第八章 指標

1 什麼是位址 include using namespace std int main 11 在堆中建立對像 我們既然可以在堆中儲存變數,那麼也就可以儲存對像,我們可以將對像儲存堆中,然後通過指標來訪問它 include using namespace std class human 14 在建構...

第八章(筆記)

能在 中進行記憶體單元的定址的暫存器只有4個,分別是bx si di bp 其中bx bp 是基址,bx對應的段位址是ds,bp對應的段位址是ss si di 是變址,單獨使用時段位址是ds,組合使用段位址是跟隨組合的基址對應的段位址 中進行記憶體單元定址彙總 si di bx bp 常量 si 常...

第八章 字典

d 空字典 d 這就是字典 d dict.fromkeys a b d dict zip keyslist,valslist d dict name bob age 22 建立字典的函式 d name 通過索引key獲取對應的value d.keys 返回d字典物件所有key,返回乙個列表 d.va...