“工欲善其事,必先利其器”,對于百度工程師來說,算法就是他們解決難題的利器。
為什么這么說?因為百度搜索引擎研發(fā)的各個環(huán)節(jié)都離不開算法。我們需要快速,準確、實用、創(chuàng)新和不斷改進的算法來滿足用戶的需求。
百度面對的是海量的互聯(lián)網(wǎng)數(shù)據(jù),以及每天上億次的檢索請求。它要求百度能夠收錄和索引超過10億的中文網(wǎng)頁,并提供快速的檢索服務。這只有高效率的算法才能完成。
百度招聘的工程師在加入公司后,有一道入門練習題,就是編寫一個數(shù)據(jù)掃描分析程序,要求寫出的程序能在1分鐘之內(nèi)掃描分析完千萬量級的數(shù)據(jù),才算及格。高水平的程序員可以利用高效的算法在10秒以內(nèi)解決問題,甚至只要六七秒。但如果沒用對算法,花一星期的時間,也做不到1分鐘之內(nèi)。
大家可以設想一下,百度有十億以上的網(wǎng)頁,如果要在一周甚至三天內(nèi)處理一遍,平均每秒處理要多少個?每天1億次的檢索又意味著峰值時每秒要處理多少次檢索?事實上,針對一個問題,我們可以想出很多的算法,但如果效率不高,是無法真正投入使用的。
Web搜索引擎是一個很新的研究領域,因為從它誕生到現(xiàn)在不過10年左右的時間。學術界IR(Information Retrieval)領域的研究為搜索引擎提供了不少算法方面的理論基礎模型,但這些理論距構建一個好的Web搜索引擎還有很大一段距離。這需要我們探索和開發(fā)很多新的算法及系統(tǒng)。實際上,百度搜索引擎中的很多算法都極具創(chuàng)新性,而且都是基于實際應用的需求。這是和學術界研究工作的一個較大差異。學術界的算法研究主要是為了解決某個學術方面的問題,不是太關注實用性,以及效率。
舉個例子來說,在傳統(tǒng)的中文分詞算法研究中,學術界最關注的是能達到多高的準確率,但對算法的運行速度上考慮的相對較少??稍诎俣龋绻褂玫姆衷~算法速度太慢,就根本無法應用。此外,百度面對的是Web上的大量數(shù)據(jù),大部分傳統(tǒng)的IR算法都會遇到信息爆炸的問題,我們需要想出很多新的方法來解決這些問題。這對我們的工程師的算法提出了很高的要求。
Web上的數(shù)據(jù)是不斷變化的,用戶的檢索需求也是不斷變化的。百度就是要在這不斷變化的兩者之間需找一個最佳匹配。所以百度的算法需要持續(xù)的進行改進,以迅速適應這些變化。比如對搜索引擎來說有一個方面的技術很重要,就是判斷一個網(wǎng)站是否在作弊的方法。由于那些針對搜索引擎作弊的人,如果能提高搜索引擎排名,將獲得巨大的經(jīng)濟利益,所以他們會不斷使用各種方法去猜測百度算法中潛在的漏洞,進行攻擊。這是一個很復雜的問題,而且仍在不斷發(fā)展變化中。這就要求我們能夠迅速的發(fā)現(xiàn)這類問題,提出算法,并應用到百度搜索引擎中。在最短時間內(nèi)消滅問題。否則作弊行為很快就會泛濫成災。
在百度,算法的應用是融入到研發(fā)部門每個人的工作中的。在這里,不是經(jīng)理告訴工程師做什么,怎么做,用什么算法,而是需要工程師自己在某個領域去發(fā)現(xiàn)問題,提出算法,評估效果,并不斷改進。這要求每個工程師在算法上的基本功很強,并能靈活的加以應用,以解決實際問題?,F(xiàn)在,百度有不少的程序員,他們大部分的時間是用在發(fā)現(xiàn)問題,分析問題,思考解決問題的方法上。實際編寫代碼所花的時間并不多。
有不少人覺得,現(xiàn)在的搜索引擎已經(jīng)足夠好了,算法上沒有太多改進余地了。我不贊成這個觀點。雖然每次CNNIC互聯(lián)網(wǎng)用戶調(diào)查的數(shù)據(jù)顯示,超過90%的人對搜索引擎提供的服務表示滿意,但是第一次搜索就能找到滿意結(jié)果的用戶只有50%左右,很多用戶都是在多次更換關鍵詞之后才搜索到自己想要的結(jié)果。這說明我們還有巨大的改進空間。讓所有用戶能在第一時間找到他們想要的信息,是我們的最終目標。
可以說,搜索引擎開發(fā)中使用的基本算法大部分都在大學課程中涵蓋了。對于一個人來說,在學校學習過這個算法,和能夠靈活運用是兩個概念。只有通過參與較多的項目開發(fā)和程序編寫,將算法和應用相結(jié)合,才能在這方面得到較好的發(fā)展。 對于算法學習,我的建議還是多思考,多做項目和程序。在做的過程中肯定會遇到一些問題,這是正常的。好的程序員善于從問題和失敗中學到東西,舉一反三,設法避免以后出現(xiàn)同樣或類似的錯誤。另外,還要善于從別人身上學習,有意識的進行思考和總結(jié),這是比較有效的方式。
評論(0人參與,0條評論)
發(fā)布評論
最新評論