|
倘若你去問一個木匠學徒:你需要什么樣的工具進行工作,他可能會回答你:“我只要一把錘子和一個鋸”。但是如果你去問一個老木工或者是大師級的建筑師,他會告訴你“我需要一些精確的工具”。由于計算機所解決的問題都是從生活中抽象出來的問題,其復雜性不言而喻,所以我們需要這樣精確有效的工具去解決現(xiàn)實生活中的復雜問題。算法、數(shù)據(jù)結(jié)構(gòu)都是程序設(shè)計中必不可少的精確工具。算法的重要性是每一個程序員都十分清楚的。 程序設(shè)計當中解決得相當一部分問題都會涉及各種各樣的科學計算,這需要程序員具有什么樣的基礎(chǔ)呢?實際問題轉(zhuǎn)換為程序,要經(jīng)過一個對問題抽象的過程,建立起完善的數(shù)學模型,只有這樣,我們才能建立一個設(shè)計良好的程序。從中我們不難看出計算數(shù)學在程序設(shè)計領(lǐng)域的重要性。恩師孟巖先生曾經(jīng)撰文過若干技術(shù)書籍之四書五經(jīng),似乎這也成了先生的標志之一,這次冒險也湊一個…… 作為這方面的介紹,如果不介紹下面這本唯恐大師們笑話,即是計算機程序設(shè)計的史詩TAOCP: 《計算機程序設(shè)計藝術(shù)》 英文名稱:The Art of Computer Programming 作者:Donald.E.Knuth Donald.E.Knuth人生最輝煌的時刻在斯坦福大學計算機系渡過,美國計算機協(xié)會圖靈獎的獲得者,是本領(lǐng)域內(nèi)當之無愧的泰斗。被簡稱為TAOCP的這本巨著內(nèi)容博大精深,幾乎涵蓋了計算機程序設(shè)計算法與理論最重要的內(nèi)容。現(xiàn)在發(fā)行的只有三卷,分別為基礎(chǔ)運算法則,半數(shù)值算法,以及分揀和搜索??偣矐?yīng)當有7卷。以我個人對本系列書的把握,大家除了可以如其它書籍那樣閱讀本書,也可以將其作為計算機程序設(shè)計的字典。畢竟內(nèi)容涵蓋實在是太廣泛??幢緯鴷r最關(guān)注的應(yīng)當是作者嚴謹?shù)乃季S方法。每個人都有自己的讀書方法,一些大師們說應(yīng)當順序讀本書,因為它被寫得簡直就像是詩,然而這還要看大家個人的體會。至于本書的價值我覺得Bill Gates先生的話足以說明問題:“如果你認為你是一名真正優(yōu)秀的程序員讀Knuth的《計算機程序設(shè)計藝術(shù)》,如果你能讀懂整套書的話,請給我發(fā)一份你的簡歷”。作者數(shù)學方面的功底造就了本書嚴謹?shù)娘L格,雖然本書不是用當今流行的程序設(shè)計語言描述的,但這絲毫不損傷它“程序設(shè)計史詩”的地位。道理很簡單,它內(nèi)涵的設(shè)計思想是永遠不會過時的。除非英語實在有困難,否則建議讀者選用英文版。 如果將TAOCP比喻成“計算機程序設(shè)計理論的荷馬史詩”,那么被簡稱作CLRS的《算法導論》不妨稱它作 “計算機算法的圣經(jīng)”。 《算法導論》 英文名稱:Introduction to Algorithms 作者:Thomas H. Cormen ,Charles E. Leiserson ,Ronald L. Rivest ,Clifford Stein 本書的主要作者來自麻省理工大學計算機,作者之一Ronald L.Rivest 由于其在公開秘鑰密碼算法RSA上的貢獻獲得了圖靈獎,目前是算法的標準教材,美國許多名校的計算機系都使用它,國內(nèi)有些院校也將本書作為算法課程的教材。另外許多專業(yè)人員也經(jīng)常引用它。由于TAOCP只出版了3卷,CLRS比較起前者來則顯得內(nèi)容更為全面,基本包含了所有的經(jīng)典算法。本書程序全部由偽代碼實現(xiàn),這更增添了本書的通用性,使得利用各種程序設(shè)計語言的程序員都可以作為參考。語言方面通俗,很適合作為算法教材和自學算法之用。國內(nèi)的很多作品名為數(shù)據(jù)結(jié)構(gòu),從本書中斷章取義,把數(shù)據(jù)結(jié)構(gòu)與算法混為一談,搞得作者自己都迷迷糊糊。這也是我不十分愿意向大家推薦國內(nèi)作品的原因。你會發(fā)現(xiàn)現(xiàn)在基本上所有的數(shù)據(jù)結(jié)構(gòu)與算法書籍都會將本書作為參考文獻之一,更可以說明一個問題,本書是作為讀者進行算法學習的最佳選擇。作為本書的補充內(nèi)容,我愿意向大家推薦下面的學習資料:你可以通過這個地址找到本書的所有練習答案:http://www./people/beetle/ 。為了更好的學習本書中的內(nèi)容,最好的指導當然是來自作者本身講述本書的課程,讀者們可以通過http://18.89.1.101/sma/5503fall2001/index5503fall2001.html 獲得課程的錄像。 有兩套優(yōu)秀的書我不想作為單獨的推薦,但作為初學算法的高級語言程序員也不失為極好的參考: Algorithms in C++以及 Algorithms in Java系列。作者都是普林斯頓大學計算機系赫赫有名的教授Robert Sedgewick, 他是TAOCP作者Donald.E.Knuth大師們下的高徒。算法理論方面并不遜色于CLRS,兩個版本分別為C++和Java程序員量身定做。作為專門語言的算法書籍參考,這兩本也是我唯一愿意向大家推薦的??梢宰鳛椤端惴▽д摗芬粫难a充。如果你對密碼學算法感興趣,那么《應(yīng)用密碼學》便是你的首選。 計算機數(shù)學理論方面可推薦的書籍是相當多的,究竟哪些數(shù)學理論基礎(chǔ)是我們應(yīng)當涉足的,哪些基本上我們是不需要的,大家可以參考《CSDN開發(fā)高手》9月刊上的《計算機科學技術(shù)數(shù)學理論淺談》,或者通過下面的地址瀏覽此文:http://www./docs/docs.php?id=111 離散數(shù)學在計算機數(shù)學理論領(lǐng)域的位置顯然是首屈一指的,首先向大家推薦的就是: 《離散數(shù)學及其應(yīng)用》 英文名稱:Discrete Mathematics and Its Applications,Fourth Edition 作者:Kenneth H.Rosen 本書的價值已經(jīng)被全世界幾百所大學所證實,作為離散數(shù)學領(lǐng)域的經(jīng)典教材,全世界幾乎所有知名的院校都曾經(jīng)使用本書作為教材。以我個人觀點看來,這本書可以稱之為離散數(shù)學百科。書中不但介紹了離散數(shù)學的理論和方法,還有豐富的歷史資料和相關(guān)學習網(wǎng)站資源。更為令人激動的便是這本書少有的將離散數(shù)學理論與應(yīng)用結(jié)合得如此的好。你可以看到離散數(shù)學理論在邏輯電路,程序設(shè)計,商業(yè)和互聯(lián)網(wǎng)等諸多領(lǐng)域的應(yīng)用實例。考慮到大多數(shù)讀 |
|
|