李開復:算法的力量

看板Prob_Solve (計算數學 Problem Solving)作者 (KERORO軍曹)時間18年前 (2006/06/29 10:25), 編輯推噓9(900)
留言9則, 7人參與, 最新討論串1/1
算法是計算機科學領域最重要的基石之一,但卻受到了國內一些程序員的冷落。許多學生 看到一些公司在招聘時要求的編程語言五花八門就產生了一種誤解,認為學計算機就是學 各種編程語言,或者認為,學習最新的語言、技術、標準就是最好的舖路方法。其實大家 都被這些公司誤導了。編程語言雖然該學,但是學習計算機算法和理論更重要,因為計算 機算法和理論更重要,因為計算機語言和開發平台日新月異,但萬變不離其宗的是那些算 法和理論,例如數據結構、算法、編譯原理、計算機體系結構、關系型數據庫原理等等。 在“開復學生網”上,有位同學生動地把這些基礎課程比擬為“內功”,把新的語言、技 術、標準比擬為“外功”。整天趕時髦的人最後隻懂得招式,沒有功力,是不可能成為高 手的。 算法與我 當我在1980年轉入計算機科學系時,還沒有多少人的專業方向是計算機科學。有許多其他 系的人嘲笑我們說:“知道為什麼隻有你們系要加一個‘科學’,而沒有‘物理科學系’ 或‘化學科學系’嗎?因為人家是真的科學,不需要畫蛇添足,而你們自己心虛,生怕不 ‘科學’,才這樣欲蓋彌彰。”其實,這點他們徹底弄錯了。真正學懂計算機的人(不隻 是“編程匠”)都對數學有相當的造詣,既能用科學家的嚴謹思維來求証,也能用工程師 的務實手段來解決問題──而這種思維和手段的最佳演繹就是“算法”。 記得我讀博時寫的Othello對弈軟件獲得了世界冠軍。當時,得第二名的人認為我是靠僥 幸才打贏他,不服氣地問我的程序平均每秒能搜索多少步棋,當他發現我的軟件在搜索效 率上比他快60多倍時,才徹底服輸。為什麼在同樣的機器上,我可以多做60倍的工作呢? 這是因為我用了一個最新的算法,能夠把一個指數函數轉換成四個近似的表,隻要用常數 時間就可得到近似的答案。在這個例子中,是否用對算法才是能否贏得世界冠軍的關鍵。 還記得1988年貝爾實驗室副總裁親自來訪問我的學校,目的就是為了想了解為什麼他們的 語音識別系統比我開發的慢幾十倍,而且,在擴大至大詞匯系統後,速度差異更有幾百倍 之多。他們雖然買了幾台超級計算機,勉強讓系統跑了起來,但這麼貴的計算資源讓他們 的產品部門很反感,因為“昂貴”的技術是沒有應用前景的。在與他們探討的過程中,我 驚訝地發現一個O(n*m)的動態規劃(dynamic programming)居然被他們做成了O(n*n*m)。 更驚訝的是,他們還為此發表了不少文章,甚至為自己的算法起了一個很特別的名字,並 將算法提名到一個科學會議裡,希望能得到大獎。當時,貝爾實驗室的研究員當然絕頂聰 明,但他們全都是學數學、物理或電機出身,從未學過計算機科學或算法,才犯了這麼基 本的錯誤。我想那些人以後再也不會嘲笑學計算機科學的人了吧! 網絡時代的算法 有人也許會說:“今天計算機這麼快,算法還重要嗎?”其實永遠不會有太快的計算機, 因為我們總會想出新的應用。雖然在摩爾定律的作用下,計算機的計算能力每年都在飛快 增長,價格也在不斷下降。可我們不要忘記,需要處理的信息量更是呈指數級的增長。現 在每人每天都會創造出大量數據(照片,視頻,語音,文本等等)。日益先進的紀錄和存 儲手段使我們每個人的信息量都在爆炸式的增長。互聯網的信息流量和日志容量也在飛快 增長。在科學研究方面,隨著研究手段的進步,數據量更是達到了前所未有的程度。無論 是三維圖形、海量數據處理、機器學習、語音識別,都需要極大的計算量。在網絡時代, 越來越多的挑戰需要靠卓越的算法來解決。 再舉另一個網絡時代的例子。在互聯網和手機搜索,如果要找附近的咖啡店,那麼搜索引 擎該怎麼處理這個請求呢?最簡單的辦法就是把整個城市的咖啡館都找出來,然後計算出 它們的所在位置與你之間的距離,再進行排序,然後返回最近的結果。但該如何計算距離 呢?圖論裡有不少算法可以解決這個問題。 這麼做也許是最直觀的,但絕對不是最迅速的。如果一個城市隻有為數不多的咖啡館,那 麼這麼做應該沒什麼問題,反正計算量不大。但如果一個城市裡有很多咖啡館,又有很多 用戶都需要類似的搜索,那麼服務器所承受的壓力就大多了。在這種情況下,我們該怎樣 優化算法呢? 首先,我們可以把整個城市的咖啡館做一次“預處理”。比如,把一個城市分成若幹個“ 格子(grid)”,然後根據用戶所在的位置把他放到某一個格子裡,隻對格子裡的咖啡館進 行距離排序。 問題又來了,如果格子大小一樣,那麼絕大多數結果都可能出現在市中心的一個格子裡, 而郊區的格子裡隻有極少的結果。在這種情況下,我們應該把市中心多分出幾個格子。更 進一步,格子應該是一個“樹結構”,最頂層是一個大格──整個城市,然後逐層下降, 格子越來越小,這樣有利於用戶進行精確搜索──如果在最底層的格子裡搜索結果不多, 用戶可以逐級上升,放大搜索范圍。 上述算法對咖啡館的例子很實用,但是它具有通用性嗎?答案是否定的。把咖啡館抽象一 下,它是一個“點”,如果要搜索一個“面”該怎麼辦呢?比如,用戶想去一個水庫玩, 而一個水庫有好幾個入口,那麼哪一個離用戶最近呢?這個時候,上述“樹結構”就要改 成“r-tree”,因為樹中間的每一個節點都是一個范圍,一個有邊界的范圍(參考:http: //www.cs.umd.edu/~hjs/rtrees/index.html)。 通過這個小例子,我們看到,應用程序的要求千變萬化,很多時候需要把一個復雜的問題 分解成若幹簡單的小問題,然後再選用合適的算法和數據結構。 並行算法:Google的核心優勢 上面的例子在Google裡就要算是小case了!每天Google的網站要處理十億個以上的搜索, GMail要儲存幾千萬用戶的2G郵箱,Google Earth要讓數十萬用戶同時在整個地球上遨遊 ,並將合適的圖片經過互聯網提交給每個用戶。如果沒有好的算法,這些應用都無法成為 現實。 在這些的應用中,哪怕是最基本的問題都會給傳統的計算帶來很大的挑戰。例如,每天都 有十億以上的用戶訪問Google的網站,使用Google的服務,也產生很多很多的日志(Log) 。 因為Log每份每秒都在飛速增加,我們必須有聰明的辦法來進行處理。我曾經在面試中 問過關於如何對Log進行一些分析處理的問題,有很多面試者的回答雖然在邏輯上正確, 但是實際應用中是幾乎不可行的。按照它們的算法,即便用上幾萬台機器,我們的處理速 度都根不上數據產生的速度。 那麼Google是如何解決這些問題的? 首先,在網絡時代,就算有最好的算法,也要能在並行計算的環境下執行。在Google的數 據中心,我們使用的是超大的並行計算機。但傳統的並行算法運行時,效率會在增加機器 數量後迅速降低,也就是說,十台機器如果有五倍的效果,增加到一千台時也許就隻有幾 十倍的效果。這種事半功倍的代價是沒有哪家公司可以負擔得起的。而且,在許多並行算 法中,隻要一個結點犯錯誤,所有計算都會前功盡棄。 那麼Google是如何開發出既有效率又能容錯的並行計算的呢? Google最資深的計算機科學家Jeff Dean認識到,Google所需的絕大部分數據處理都可以 歸結為一個簡單的並行算法:Map and Reduce(http://labs.google.com/papers/mapred uce.html)。這個算法能夠在很多種計算中達到相當高的效率,而且是可擴展的(也就是 說,一千台機器就算不能達到一千倍的效果,至少也可以達到幾百倍的效果)。Map and Reduce的另外一大特色是它可以利用大批廉價的機器組成功能強大的server farm。最後 ,它的容錯性能異常出色,就算一個server farm宕掉一半,整個fram依然能夠運行。正是因 為這個天才的認識,才有了Map and Reduce算法。借助該算法,Google幾乎能無限地增加 計算量,與日新月異的互聯網應用一同成長。 算法並不局限於計算機和網絡 舉一個計算機領域外的例子:在高能物理研究方面,很多實驗每秒鐘都能幾個TB的數據量 。但因為處理能力和存儲能力的不足,科學家不得不把絕大部分未經處理的數據丟棄掉。 可大家要知道,新元素的信息很有可能就藏在我們來不及處理的數據裡面。同樣的,在其 他任何領域裡,算法可以改變人類的生活。例如人類基因的研究,就可能因為算法而發明 新的醫療方式。在國家安全領域,有效的算法可能避免下一個911的發生。在氣象方面, 算法可以更好地預測未來天災的發生,以拯救生命。 所以,如果你把計算機的發展放到應用和數據飛速增長的大環境下,你一定會發現;算法 的重要性不是在日益減小,而是在日益加強。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.156.192

06/29 10:45, , 1F
很好奇, 這是刊在哪個雜誌的咧?
06/29 10:45, 1F

06/29 10:45, , 2F
如果刊在數字週刊或水果日報, 讀者應該會一頭?水吧 XD
06/29 10:45, 2F

06/29 11:03, , 3F
上谷歌查應該就拿查到這篇了
06/29 11:03, 3F

06/29 15:39, , 4F
古歌 XD 哈哈 還是很奇怪
06/29 15:39, 4F

06/29 22:24, , 5F
推暈倒兩仟
06/29 22:24, 5F

07/03 23:29, , 6F
不錯的文章呀~
07/03 23:29, 6F

07/04 12:52, , 7F
好文章..只是很多大陸的用語..看得很辛苦.算法=演算法?
07/04 12:52, 7F

07/04 15:17, , 8F
好文 M 起來 :P
07/04 15:17, 8F
weii:轉錄至看板 SFFamily 08/28 13:36

09/23 22:43, , 9F
好文~^^~ 借轉:)
09/23 22:43, 9F
文章代碼(AID): #14epeH5u (Prob_Solve)
文章代碼(AID): #14epeH5u (Prob_Solve)