下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、算法是計(jì)算機(jī)科學(xué)領(lǐng)域最重要的基石之一,但卻受到了國內(nèi)一些程序員的冷落。許多學(xué)生看到一些公司在招聘時(shí)要求的編程語言五花八門,就產(chǎn)生了一種誤解,認(rèn)為學(xué)計(jì)算機(jī)就是學(xué)各種編程語言,或者認(rèn)為,學(xué)習(xí)最新的語言、技術(shù)、標(biāo)準(zhǔn)就是最好的鋪路方法。其實(shí),大家被這些公司誤導(dǎo)了。編程語言雖然該學(xué),但是學(xué)習(xí)計(jì)算機(jī)算法和理論更重要,因?yàn)橛?jì)算機(jī)語言和開發(fā)平臺日新月異,但萬變不離其宗的是那些算法和理論,例如數(shù)據(jù)結(jié)構(gòu)、算法、編譯原理、計(jì)算機(jī)體系結(jié)構(gòu)、關(guān)系型數(shù)據(jù)庫原理等等。在“開復(fù)學(xué)生網(wǎng)”上,有位同學(xué)生動(dòng)地把這些基礎(chǔ)課程比擬為“內(nèi)功”,把新的語言、技術(shù)、標(biāo)準(zhǔn)比擬為“外功”。整天趕時(shí)髦的人最后只懂得招式,沒有功力,是不可能成為高手
2、的。算法與我當(dāng)我在1980年轉(zhuǎn)入計(jì)算機(jī)科學(xué)系時(shí),還沒有多少人的專業(yè)方向是計(jì)算機(jī)科學(xué)。有許多其他系的人嘲笑我們說:“知道為什么只有你們系要加一個(gè)科學(xué),而沒有物理科學(xué)系或化學(xué)科學(xué)系嗎?因?yàn)槿思沂钦娴目茖W(xué),不需要畫蛇添足,而你們自己心虛,生怕不科學(xué),才這樣欲蓋彌彰。” 其實(shí),這點(diǎn)他們徹底弄錯(cuò)了。真正學(xué)懂計(jì)算機(jī)的人(不只是“編程匠”)都對數(shù)學(xué)有相當(dāng)?shù)脑煸劊饶苡每茖W(xué)家的嚴(yán)謹(jǐn)思維來求證,也能用工程師的務(wù)實(shí)手段來解決問題而這種思維和手段的最佳演繹就是“算法”。記得我讀博時(shí)寫的Othello對弈軟件獲得了世界冠軍。當(dāng)時(shí),得第二名的人認(rèn)為我是靠僥幸才打贏他,不服氣地問我的程序平均每秒能搜索多少步棋,當(dāng)他發(fā)現(xiàn)我
3、的軟件在搜索效率上比他快60多倍時(shí),才徹底服輸。為什么在同樣的機(jī)器上,我可以多做60倍的工作呢?這是因?yàn)槲矣昧艘粋€(gè)最新的算法,能夠把一個(gè)指數(shù)函數(shù)轉(zhuǎn)換成四個(gè)近似的表,只要用常數(shù)時(shí)間就可得到近似的答案。在這個(gè)例子中,是否用對算法才是能否贏得世界冠軍的關(guān)鍵。還記得1988年貝爾實(shí)驗(yàn)室副總裁親自來訪問我的學(xué)校,目的就是為了想了解為什么他們的語音識別系統(tǒng)比我開發(fā)的慢幾十倍,而且,在擴(kuò)大至大詞匯系統(tǒng)后,速度差異更有幾百倍之多。他們雖然買了幾臺超級計(jì)算機(jī),勉強(qiáng)讓系統(tǒng)跑了起來,但這么貴的計(jì)算資源讓他們的產(chǎn)品部門很反感,因?yàn)椤鞍嘿F”的技術(shù)是沒有應(yīng)用前景的。在與他們探討的過程中,我驚訝地發(fā)現(xiàn)一個(gè)O(n*m)的動(dòng)態(tài)
4、規(guī)劃(dynamic programming)居然被他們做成了O(n*n*m)。更驚訝的是,他們還為此發(fā)表了不少文章,甚至為自己的算法起了一個(gè)很特別的名字,并將算法提名到一個(gè)科學(xué)會(huì)議里,希望能得到大獎(jiǎng)。當(dāng)時(shí),貝爾實(shí)驗(yàn)室的研究員當(dāng)然絕頂聰明,但他們?nèi)际菍W(xué)數(shù)學(xué)、物理或電機(jī)出身,從未學(xué)過計(jì)算機(jī)科學(xué)或算法,才犯了這么基本的錯(cuò)誤。我想那些人以后再也不會(huì)嘲笑學(xué)計(jì)算機(jī)科學(xué)的人了吧!網(wǎng)絡(luò)時(shí)代的算法有人也許會(huì)說:“今天計(jì)算機(jī)這么快,算法還重要嗎?”其實(shí)永遠(yuǎn)不會(huì)有太快的計(jì)算機(jī),因?yàn)槲覀兛倳?huì)想出新的應(yīng)用。雖然在摩爾定律的作用下,計(jì)算機(jī)的計(jì)算能力每年都在飛快增長,價(jià)格也在不斷下降??晌覀儾灰?,需要處理的信息量更
5、是呈指數(shù)級的增長。現(xiàn)在每人每天都會(huì)創(chuàng)造出大量數(shù)據(jù)(照片,視頻,語音,文本等等)。日益先進(jìn)的記錄和存儲手段使我們每個(gè)人的信息量都在爆炸式的增長?;ヂ?lián)網(wǎng)的信息流量和日志容量也在飛快增長。在科學(xué)研究方面,隨著研究手段的進(jìn)步,數(shù)據(jù)量更是達(dá)到了前所未有的程度。無論是三維圖形、海量數(shù)據(jù)處理、機(jī)器學(xué)習(xí)、語音識別,都需要極大的計(jì)算量。在網(wǎng)絡(luò)時(shí)代,越來越多的挑戰(zhàn)需要靠卓越的算法來解決。再舉另一個(gè)網(wǎng)絡(luò)時(shí)代的例子。在互聯(lián)網(wǎng)和手機(jī)搜索上,如果要找附近的咖啡店,那么搜索引擎該怎么處理這個(gè)請求呢?最簡單的辦法就是把整個(gè)城市的咖啡館都找出來,然后計(jì)算出它們的所在位置與你之間的距離,再進(jìn)行排序,然后返回最近的結(jié)果。但該如何計(jì)
6、算距離呢?圖論里有不少算法可以解決這個(gè)問題。這么做也許是最直觀的,但絕對不是最迅速的。如果一個(gè)城市只有為數(shù)不多的咖啡館,那這么做應(yīng)該沒什么問題,反正計(jì)算量不大。但如果一個(gè)城市里有很多咖啡館,又有很多用戶都需要類似的搜索,那么服務(wù)器所承受的壓力就大多了。在這種情況下,我們該怎樣優(yōu)化算法呢?首先,我們可以把整個(gè)城市的咖啡館做一次“預(yù)處理”。比如,把一個(gè)城市分成若干個(gè)“格子(grid)”,然后根據(jù)用戶所在的位置把他放到某一個(gè)格子里,只對格子里的咖啡館進(jìn)行距離排序。問題又來了,如果格子大小一樣,那么絕大多數(shù)結(jié)果都可能出現(xiàn)在市中心的一個(gè)格子里,而郊區(qū)的格子里只有極少的結(jié)果。在這種情況下,我們應(yīng)該把市中心
7、多分出幾個(gè)格子。更進(jìn)一步,格子應(yīng)該是一個(gè)“樹結(jié)構(gòu)”,最頂層是一個(gè)大格整個(gè)城市,然后逐層下降,格子越來越小,這樣有利于用戶進(jìn)行精確搜索如果在最底層的格子里搜索結(jié)果不多,用戶可以逐級上升,放大搜索范圍。上述算法對咖啡館的例子很實(shí)用,但是它具有通用性嗎?答案是否定的。把咖啡館抽象一下,它是一個(gè)“點(diǎn)”,如果要搜索一個(gè)“面”該怎么辦呢?比如,用戶想去一個(gè)水庫玩,而一個(gè)水庫有好幾個(gè)入口,那么哪一個(gè)離用戶最近呢?這個(gè)時(shí)候,上述“樹結(jié)構(gòu)”就要改成“r-tree”,因?yàn)闃渲虚g的每一個(gè)節(jié)點(diǎn)都是一個(gè)范圍,一個(gè)有邊界的范圍(參考:/hjs/rtrees/index.html)。
8、通過這個(gè)小例子,我們看到,應(yīng)用程序的要求千變?nèi)f化,很多時(shí)候需要把一個(gè)復(fù)雜的問題分解成若干簡單的小問題,然后再選用合適的算法和數(shù)據(jù)結(jié)構(gòu)。并行算法:Google的核心優(yōu)勢上面的例子在Google里就要算是小case了!每天Google的網(wǎng)站要處理十億個(gè)以上的搜索,GMail要儲存幾千萬用戶的2G郵箱,Google Earth要讓數(shù)十萬用戶同時(shí)在整個(gè)地球上遨游,并將合適的圖片經(jīng)過互聯(lián)網(wǎng)提交給每個(gè)用戶。如果沒有好的算法,這些應(yīng)用都無法成為現(xiàn)實(shí)。在這些的應(yīng)用中,哪怕是最基本的問題都會(huì)給傳統(tǒng)的計(jì)算帶來很大的挑戰(zhàn)。例如,每天都有十億以上的用戶訪問Google的網(wǎng)站,使用Google的服務(wù),也產(chǎn)生很多很多的日
9、志(Log)。因?yàn)長og每分每秒都在飛速增加,我們必須有聰明的辦法來進(jìn)行處理。我曾經(jīng)在面試中問過關(guān)于如何對log進(jìn)行一些分析處理的問題,有很多面試者的回答雖然在邏輯上正確,但在實(shí)際應(yīng)用中是幾乎不可行的。按照他們的算法,即便用上幾萬臺機(jī)器,我們的處理速度都跟不上數(shù)據(jù)產(chǎn)生的速度。那么Google是如何解決這些問題的呢?首先,在網(wǎng)絡(luò)時(shí)代,就算有最好的算法,也要能在并行計(jì)算的環(huán)境下執(zhí)行。在Google的數(shù)據(jù)中心,我們使用的是超大的并行計(jì)算機(jī)。但傳統(tǒng)的并行算法運(yùn)行時(shí),效率會(huì)在增加機(jī)器數(shù)量后迅速降低,也就是說,十臺機(jī)器如果有五倍的效果,增加到一千臺時(shí)也許就只有幾十倍的效果。這種事倍功半的代價(jià)是沒有哪家公司
10、可以負(fù)擔(dān)得起的。而且,在許多并行算法中,只要一個(gè)結(jié)點(diǎn)犯錯(cuò)誤,所有計(jì)算都會(huì)前功盡棄。那么Google是如何開發(fā)出既有效率又能容錯(cuò)的并行計(jì)算的呢?Google最資深的計(jì)算機(jī)科學(xué)家Jeff Dean認(rèn)識到, Google 所需的絕大部分?jǐn)?shù)據(jù)處理都可以歸結(jié)為一個(gè)簡單的并行算法:Map and Reduce( 這個(gè)算法能夠在很多種計(jì)算中達(dá)到相當(dāng)高的效率,而且是可擴(kuò)展的(也就是說,一千臺機(jī)器就算不能達(dá)到一千倍的效果,至少也可以達(dá)到幾百倍的效果)。Map and Reduce的另外一大特色是它可以利用大批廉價(jià)的機(jī)器組成功能強(qiáng)大的server farm。最后,它的容錯(cuò)性能異常出色,就算一個(gè)server far
11、m里面的機(jī)器down掉一半,整個(gè)farm依然能夠運(yùn)行。正是因?yàn)檫@個(gè)天才的認(rèn)識,才有了Map and Reduce算法。借助該算法,Google幾乎能無限地增加計(jì)算量,與日新月異的互聯(lián)網(wǎng)應(yīng)用一同成長。算法并不局限于計(jì)算機(jī)和網(wǎng)絡(luò)舉一個(gè)計(jì)算機(jī)領(lǐng)域外的例子:在高能物理研究方面,很多實(shí)驗(yàn)每秒鐘都產(chǎn)生幾個(gè)TB的數(shù)據(jù)量。但因?yàn)樘幚砟芰痛鎯δ芰Φ牟蛔?,科學(xué)家不得不把絕大部分未經(jīng)處理的數(shù)據(jù)丟棄掉??纱蠹乙?,新元素的信息很有可能就藏在我們來不及處理的數(shù)據(jù)里面。同樣的,在其他任何領(lǐng)域里,算法都可以改變?nèi)祟惖纳睢@缛祟惢虻难芯?,就可能因?yàn)樗惴ǘl(fā)明新的醫(yī)療方式。在國家安全領(lǐng)域,有效的算法可能避免下一個(gè)91
12、1的發(fā)生。在氣象方面,算法可以更好地預(yù)測未來天災(zāi)的發(fā)生,以拯救生命。所以,如果你把計(jì)算機(jī)的發(fā)展放到應(yīng)用和數(shù)據(jù)飛速增長的大環(huán)境下,你一定會(huì)發(fā)現(xiàn),算法的重要性不是在日益減小,而是在日益加強(qiáng)。給程序員的七個(gè)建議(1)練內(nèi)功。不要只花功夫?qū)W習(xí)各種流行的編程語言和工具,以及某些公司招聘廣告上要求的科目。要把數(shù)據(jù)結(jié)構(gòu)、算法、數(shù)據(jù)庫、操作系統(tǒng)原理、計(jì)算機(jī)體系結(jié)構(gòu)、計(jì)算機(jī)網(wǎng)絡(luò),離散數(shù)學(xué)等基礎(chǔ)課程學(xué)好。大家不妨試試高德納所著The Art of Computer Programming里的題目,如果你能夠解決其中的大部分題目,就說明你在算法方面有一定的功力了。(2)多實(shí)戰(zhàn)。通過編程的實(shí)戰(zhàn)積累經(jīng)驗(yàn)、鞏固知識。很多
13、中國大學(xué)畢業(yè)生缺乏編程和調(diào)試經(jīng)驗(yàn);學(xué)習(xí)C語言,考試過關(guān)就算學(xué)會(huì)了;課題項(xiàng)目中,只要程序能夠編譯,運(yùn)行,并且輸入輸出滿足要求就算了事。這些做法是不行的。寫程序的時(shí)候,大家必須多想想如何把程序?qū)懙酶泳珶挕⒏咝?、高質(zhì)量。建議大家爭取在大學(xué)四年中積累編寫十萬行代碼的經(jīng)驗(yàn)。我們必須明白的是:好程序員是寫出來的,不是學(xué)出來的。(3)求實(shí)干。不要輕視任何實(shí)際工作,比如一些看似簡單的編碼或測試。要不懈追求對細(xì)節(jié)一絲不茍的實(shí)干作風(fēng)與敬業(yè)精神。我發(fā)現(xiàn)不少程序員對于知識的掌握很膚淺,不求甚解,沒有好奇心,不會(huì)刨根問底。比如,學(xué)會(huì)了C+,是否了解一個(gè)對象在編譯后,在匯編代碼中是如何被初始化的?這個(gè)對象的各個(gè)成員在內(nèi)
14、存中是如何存放的?當(dāng)一個(gè)成員函數(shù)被調(diào)用時(shí),編譯器在匯編代碼中加入了哪些額外的動(dòng)作?虛函數(shù)的調(diào)用是如何實(shí)現(xiàn)的? 這些東西恐怕在編程語言或編譯原理中都沒有詳細(xì)提到,只有通過踏實(shí)的實(shí)干才能真正掌握。(4)重視數(shù)學(xué)學(xué)習(xí)。數(shù)學(xué)是思維的體操,數(shù)學(xué)無處不在。學(xué)計(jì)算機(jī)至少要學(xué)習(xí)離散數(shù)學(xué)、概率論、布爾代數(shù)、集合論和數(shù)理邏輯。這些知識并不難,但是對你未來的工作幫助會(huì)很大。 尤其當(dāng)你對一些“數(shù)學(xué)密集型”的領(lǐng)域如視頻、圖像處理等有興趣時(shí),這些知識將成為你手中的利器。(5)培養(yǎng)團(tuán)隊(duì)精神,學(xué)會(huì)與人合作。今天的軟件工程早已經(jīng)不是一個(gè)人可以單獨(dú)操作的,而必須靠團(tuán)隊(duì)合作才能成功。不懂得合作的人是不能成大器的。大家要多去尋找可以與人一起做項(xiàng)目的機(jī)會(huì)。(6)激勵(lì)創(chuàng)新意識,培養(yǎng)好奇心,不要死記硬背。沒有掌握某種算法技術(shù)的根本原理,就不會(huì)有應(yīng)變和創(chuàng)新的能力。想成為一位好程序員(其實(shí)從事任何一個(gè)行業(yè)都是如此),重要的是要養(yǎng)成鉆研,好奇,創(chuàng)新,動(dòng)手,合作的優(yōu)秀習(xí)慣,不滿足于填鴨,不滿足于考試交差,不滿足于表象。這不是學(xué)幾門課能夠一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 年產(chǎn)20000噸高端紡織面料技術(shù)改造項(xiàng)目可行性研究報(bào)告模板-立項(xiàng)備案
- 二零二五年度建材材料采購與環(huán)保評價(jià)服務(wù)合同范本3篇
- 中國長期護(hù)理保險(xiǎn)制度發(fā)展現(xiàn)狀及建議
- 護(hù)士職業(yè)生涯規(guī)劃
- 云南省騰沖市第四中學(xué)2024-2025學(xué)年七年級上學(xué)期期末考試 語文試題(含答案)
- 中圖版高中信息技術(shù)必修1說課稿-2.3 甄別信息的方法-
- Unit 2 Special Days Lesson 1(說課稿)-2023-2024學(xué)年人教新起點(diǎn)版英語五年級下冊
- 二年級上冊六 制作標(biāo)本-表內(nèi)除法第4課時(shí)《連乘、連除和乘除混合運(yùn)算》(說課稿)-2024-2025學(xué)年二年級上冊數(shù)學(xué)青島版(五四學(xué)制)
- 福建省龍巖市新羅區(qū)2024-2025學(xué)年三年級上學(xué)期期末數(shù)學(xué)試題
- 甘肅省天水市(2024年-2025年小學(xué)六年級語文)部編版小升初真題(下學(xué)期)試卷及答案
- 廣東深圳市龍崗區(qū)產(chǎn)服集團(tuán)招聘筆試題庫2024
- 公路施工表格
- 2024至2030年中國昆明市酒店行業(yè)發(fā)展監(jiān)測及市場發(fā)展?jié)摿︻A(yù)測報(bào)告
- 《中國心力衰竭診斷和治療指南2024》解讀(總)
- 科學(xué)新課程標(biāo)準(zhǔn)中核心素養(yǎng)的內(nèi)涵解讀及實(shí)施方略講解課件
- 輪扣式高支模施工方案
- 醫(yī)療質(zhì)量信息數(shù)據(jù)內(nèi)部驗(yàn)證制度
- 子宮內(nèi)膜間質(zhì)肉瘤的畫像組學(xué)研究
- 福建省廈門市2022-2023學(xué)年高一年級上冊期末質(zhì)量檢測物理試題(含答案)
- 2023年公路養(yǎng)護(hù)工知識考試題庫附答案
- 高警示(高危)藥品考試試題與答案
評論
0/150
提交評論