從學生時代,我們就被告知以「程式設計=演算法+資料結構」。然而長期以來,國內的軟體開發
領域過分關注企業級開發,導致了目前中國軟體開發人員對於演算法的基礎越來越不重視,
這勢必影響到軟體產業發展的創新動力。在國家號召「自主創新」的背景下,重提演算法的
意義就顯得格外重要了。
今天,我們可以看到一些真正的大型軟體企業四處開設研究中心,類似機構並不直接生產
軟體產品,而是專門從事理論研究、發表**。這些成果順氣自然地成為企業可持續發展
的動力。軟體公司巨頭在研究上投入的資本將作為他們的核心技術,創造更多價值。因此
,國家號召「自主創新」是有其道理與意義的,這也是為了國產軟體能在全國軟體的大市
場中占有一席之地。
演算法的應用,在圖形影象、金融、安全、製造等多個領域正發揮著舉足輕重的作用。然而
要用雜誌短短數頁文本來記載這些並非易事,但至少我們能夠講述一些思想,讓程式設計師從
此開始正式演算法,正視紮實的基礎。
通過這個小例子,我們看到,應用程式的要求千變萬化,很多時候需要把乙個複雜的問題
分解成若干簡單的小問題,然後再選用合適的演算法和資料結構。
並行演算法:google的核心優勢
上面的例子在google裡就要算是小case了!每天google的**要處理十億個以上的搜尋,
gmail要儲存幾千萬使用者的2g郵箱,google earth要讓數十萬使用者同時在整個地球上遨遊
,並將合適的經過網際網路提交給每個使用者。如果沒有好的演算法,這些應用都無法成為
現實。在這些的應用中,哪怕是最基本的問題都會給傳統的計算帶來很大的挑戰。例如,每天都
有十億以上的使用者訪問google的**,使用google的服務,也產生很多很多的日誌(log)
。因為log每份每秒都在飛速增加,我們必須有聰明的辦法來進行處理。我曾經在面試中
問過關於如何對log進行一些分析處理的問題,有很多面試者的回答雖然在邏輯上正確,
但是實際應用中是幾乎不可行的。按照它們的演算法,即便用上幾萬臺機器,我們的處理速
度都根不上資料產生的速度。
那麼google是如何解決這些問題的?
首先,在網路時代,就算有最好的演算法,也要能在平行計算的環境下執行。在google的數
據中心,我們使用的是超大的並行計算機。但傳統的並行演算法執行時,效率會在增加機器
數量後迅速降低,也就是說,十臺機器如果有五倍的效果,增加到一千台時也許就只有幾
十倍的效果。這種事半功倍的代價是沒有哪家公司可以負擔得起的。而且,在許多並行算
法中,只要乙個結點犯錯誤,所有計算都會前功盡棄。
那麼google是如何開發出既有效率又能容錯的平行計算的呢?
google最資深的計算機科學家jeff dean認識到,google所需的絕大部分資料處理都可以
歸結為乙個簡單的並行演算法:map and reduce
。這個演算法能夠在很多種計算中達到
相當高的效率,而且是可擴充套件的(也就是說,一千臺機器就算不能達到一千倍的效果,至
少也可以達到幾百倍的效果)。map and reduce的另外一大特色是它可以利用大批廉價的
機器組成功能強大的server farm。最後,它的容錯性能異常出色,就算乙個server farm
宕掉一半,整個fram依然能夠執行。正是因為這個天才的認識,才有了map and reduce算
法。借助該演算法,google幾乎能無限地增加計算量,與日新月異的網際網路應用一同成長。
演算法並不侷限於計算機和網路
舉乙個計算機領域外的例子:在高能物理研究方面,很多實驗每秒鐘都能幾個tb的資料量
。但因為處理能力和儲存能力的不足,科學家不得不把絕大部分未經處理的資料丟棄掉。
可大家要知道,新元素的資訊很有可能就藏在我們來不及處理的資料裡面。同樣的,在其
他任何領域裡,演算法可以改變人類的生活。例如人類基因的研究,就可能因為演算法而發明
新的醫療方式。在****領域,有效的演算法可能避免下乙個911的發生。在氣象方面,
演算法可以更好地**未來天災的發生,以拯救生命。
所以,如果你把計算機的發展放到應用和資料飛速增長的大環境下,你一定會發現;演算法
的重要性不是在日益減小,而是在日益加強。
演算法的力量
文 李開復 演算法是電腦科學領域最重要的基石之一,但卻受到了國內一些程式設計師的冷落。許多學生看到一些公司在招聘時要求的程式語言五花八門就產生了一種誤解,認為學計算機就是學各種程式語言,或者認為,學習最新的語言 技術 標準就是最好的鋪路方法。其實大家都被這些公司誤導了。程式語言雖然該學,但是學習計算...
演算法的力量
個人覺得李開復這篇文章寫得不錯,於是就篩選幾段精彩的內容分享下。通過這個小例子,我們看到,應用程式的要求千變萬化,很多時候需要把乙個複雜的問題分解成若干簡單的小問題,然後再選用合適的演算法和資料結構。並行演算法 google的核心優勢 上面的例子在google裡就要算是小case了!每天google...
演算法的力量
通過這個小例子,我們看到,應用程式的要求千變萬化,很多時候需要把乙個複雜的問題 分解成若干簡單的小問題,然後再選用合適的演算法和資料結構。並行演算法 google的核心優勢 上面的例子在google裡就要算是小case了!每天google的 要處理十億個以上的搜尋,gmail要儲存幾千萬使用者的2g...