以下內(nèi)容學(xué)習(xí)鹦聪、摘錄自《數(shù)學(xué)之美》
很多想通過(guò)作者了解google的獨(dú)門(mén)搜索技術(shù)若债,但對(duì)作者只講述簡(jiǎn)單的原理感到失望澡匪。其實(shí)熔任,技術(shù)分為“術(shù)”和“道”,具體做事方法是“術(shù)”唁情,做事的原理和原則是“道”疑苔。希望作者介紹“術(shù)”的人是像走捷徑,但是真正做好一件事情沒(méi)有捷徑甸鸟,離不開(kāi)一萬(wàn)小時(shí)的專(zhuān)業(yè)訓(xùn)練和努力惦费。
搜索引擎的原理其實(shí)非常簡(jiǎn)單兵迅,建立一個(gè)搜索引擎大致需要做這樣幾件事:自動(dòng)下載盡可能多的網(wǎng)頁(yè);建立快速有效的索引薪贫;根據(jù)相關(guān)性對(duì)網(wǎng)頁(yè)進(jìn)行公平準(zhǔn)確的排序恍箭。這就是搜索的“道”,所有的搜索服務(wù)都可以在這三個(gè)基本服務(wù)的基礎(chǔ)上很快實(shí)現(xiàn)瞧省,這就是搜索的“術(shù)”扯夭。首先從介紹索引出發(fā),因?yàn)樗罨A(chǔ)鞍匾,也最重要交洗。
二進(jìn)制作為一個(gè)計(jì)數(shù)系統(tǒng),則是公元前2-5世紀(jì)時(shí)由印度學(xué)者完成的橡淑,但是他們沒(méi)有使用0和1計(jì)數(shù)构拳。到17世紀(jì),德國(guó)偉大的數(shù)學(xué)家萊布尼茲( Gottfried Leibniz)進(jìn)一步完善了二進(jìn)制梁棠,并且用0和1表示它的兩個(gè)數(shù)字隐圾,成為我們今天使用的二進(jìn)制。二進(jìn)制除了是一種計(jì)數(shù)的方式外掰茶,它還可以表示邏輯的“是”與“非”暇藏。這第二個(gè)特性在索引中非常有用。布爾運(yùn)算是針對(duì)二進(jìn)制濒蒋,尤其是二進(jìn)制第二個(gè)特性的運(yùn)算盐碱,它很簡(jiǎn)單,可能沒(méi)有比布爾運(yùn)算更簡(jiǎn)單的運(yùn)算了沪伙。
布爾( George Boole)是19世紀(jì)英國(guó)的一位中學(xué)數(shù)學(xué)老師瓮顽,創(chuàng)辦過(guò)一所中學(xué),也當(dāng)過(guò)教授围橡。但生前沒(méi)有人認(rèn)為他是數(shù)學(xué)家暖混。(英國(guó)另一位生前沒(méi)有被公認(rèn)為科學(xué)家的是著名物理學(xué)家焦耳,雖然他生前已經(jīng)是英國(guó)皇家科學(xué)院院士翁授,但是他的公認(rèn)身份是啤酒商拣播。)布爾在工作之余,喜歡閱讀數(shù)學(xué)論著收擦,思考數(shù)學(xué)問(wèn)題贮配。1854年,布爾的《思維規(guī)律》一書(shū)出版塞赂,第一次向人們展示了如何用數(shù)學(xué)的方法解決邏輯問(wèn)題泪勒。在此之前,人們普遍認(rèn)為數(shù)學(xué)和邏輯是兩個(gè)不同的學(xué)科,今天聯(lián)合國(guó)教科文組織依然把它們嚴(yán)格分開(kāi)圆存。
布爾代數(shù)簡(jiǎn)單得不能再簡(jiǎn)單了叼旋。運(yùn)算的元素只有兩個(gè):1(TRUE,真)和0( FALSE沦辙,假)送淆。基本的運(yùn)算只有“與”(AND)怕轿、“或”(OR)和“非”(NOT)三種。
這么簡(jiǎn)單的理論能解決什么實(shí)際問(wèn)題辟拷?和布爾同時(shí)代的數(shù)學(xué)家們也有同樣的疑問(wèn)撞羽。事實(shí)上,在布爾代數(shù)提出后80多年里衫冻,它確實(shí)沒(méi)有什么像樣的應(yīng)用诀紊,直到1938年香農(nóng)在他的碩士論文中指出用布爾代數(shù)來(lái)實(shí)現(xiàn)開(kāi)關(guān)電路,才使得布爾代數(shù)成為數(shù)字電路的基礎(chǔ)隅俘。所有的數(shù)學(xué)和邏輯運(yùn)算邻奠,加、減为居、乘碌宴、除、乘方蒙畴、開(kāi)方贰镣,等等,全都能轉(zhuǎn)換成二值的布爾運(yùn)算膳凝。正是依靠這一點(diǎn)碑隆,人類(lèi)用一個(gè)個(gè)開(kāi)關(guān)電路最終“搭出”電子計(jì)算機(jī)。數(shù)學(xué)的發(fā)展實(shí)際上是不斷地抽象和概括的過(guò)程蹬音,這些抽象了的方法看似離生活越來(lái)越遠(yuǎn)上煤,但是它們最終能找到適用的地方,布爾代數(shù)便是如此著淆。
現(xiàn)在看看文獻(xiàn)檢索和布爾運(yùn)算的關(guān)系劫狠。對(duì)于一個(gè)用戶(hù)輸入的關(guān)鍵詞,搜索引擎要判斷每篇文獻(xiàn)是否含有這個(gè)關(guān)鍵詞永部,如果一篇文獻(xiàn)含有它嘉熊,我們則相應(yīng)地給篇文獻(xiàn)一個(gè)邏輯值“真”(TRUE或1),否則扬舒,給一個(gè)邏輯值“假”( FALSE或0)阐肤。比如要找有關(guān)原子能應(yīng)用的文獻(xiàn),但并不想知道如何造原子彈,可以這樣寫(xiě)一個(gè)查詢(xún)語(yǔ)句“原子能AND應(yīng)用AND(NOT原子彈)”孕惜。
布爾代數(shù)對(duì)于數(shù)學(xué)的意義等同于量子力學(xué)對(duì)于物理學(xué)的意義愧薛,它們將我們對(duì)世界的認(rèn)識(shí)從連續(xù)狀態(tài)擴(kuò)展到離散狀態(tài)。在布爾代數(shù)的“世界”里衫画,萬(wàn)物都是可以量子化的毫炉,從連續(xù)的變成一個(gè)個(gè)分離的,它們的運(yùn)算“與削罩、或瞄勾、非”也就和傳統(tǒng)的代數(shù)運(yùn)算完全不同了。現(xiàn)代物理的研究成果表明弥激,我們的世界實(shí)實(shí)在在是量子化的而不是連續(xù)的进陡。
大部分使用搜索引擎的人都會(huì)吃驚為什么它能在零點(diǎn)零幾秒鐘內(nèi)找到成千上萬(wàn)甚至上億的搜索結(jié)果。顯然微服,如果是掃描所有的文本趾疚,計(jì)算機(jī)掃描的速度再快也不可能做到這一點(diǎn),這里面一定暗藏技巧以蕴。這個(gè)技巧就是建索引糙麦。這就如同我們科技讀物末尾的索引,或者圖書(shū)館的索引丛肮。
Google有一道面試產(chǎn)品經(jīng)理的考題赡磅,就是“如何向你的奶奶解釋搜索引擎”。大部分候選人都是試圖從互聯(lián)網(wǎng)宝与、搜索等產(chǎn)品的技術(shù)層面給出解釋?zhuān)绱似偷耍@道題基本通不過(guò)。好的回答是拿圖書(shū)館的索引卡片做類(lèi)比伴鳖。每個(gè)網(wǎng)站就像圖書(shū)館里的一本書(shū)节值,我們不可能在圖書(shū)館書(shū)架上一本本地找,而是要通過(guò)搜索卡片找到它的位置榜聂,然后直接去書(shū)架上拿搞疗。
圖書(shū)館的索引卡片當(dāng)然無(wú)法進(jìn)行復(fù)雜的邏輯運(yùn)算。但是须肆,當(dāng)信息檢索進(jìn)入計(jì)算機(jī)時(shí)代后匿乃,圖書(shū)的索引便不再是卡片,而是基于數(shù)據(jù)庫(kù)的豌汇。數(shù)據(jù)庫(kù)的查詢(xún)語(yǔ)句(SQL)支持各種復(fù)雜的邏輯組合幢炸,但是背后的基本原理是基于布爾運(yùn)算的,至今如此拒贱。
布爾代數(shù)非常簡(jiǎn)單宛徊,但是對(duì)數(shù)學(xué)和計(jì)算機(jī)發(fā)展的意義重大佛嬉,它不僅把邏輯和數(shù)學(xué)合二為一,而且給了我們一個(gè)看待世界的全新視角闸天,開(kāi)創(chuàng)了今天數(shù)字化的時(shí)代暖呕。偉大的科學(xué)家牛頓說(shuō)過(guò):“真理在形式上從來(lái)是簡(jiǎn)單的,而不是復(fù)雜和含混的苞氮。”( Truth is ever to be found in simplicity湾揽, and not in the multiplicity andcontusion of things.)