“算法與計算數學”之四書五經

倘若你去問一個木匠學徒:你需要什麼樣的工具進行工作,他可能會回答你:“我只要一把錘子和一個鋸”。但是如果你去問一個老木工或者是大師級的建築師,他 會告訴你“我需要一些精確的工具”。由於計算機所解決的問題都是從生活中抽象出來的問題,其複雜性不言而喻,所以我們需要這樣精確有效的工具去解決現實生 活中的複雜問題。算法、數據結構都是程序設計中必不可少的精確工具。算法的重要性是每一個程序員都十分清楚的。

程序設計當中 解決得相當一部分問題都會涉及各種各樣的科學計算,這需要程序員具有什麼樣的基礎呢?實際問題轉換爲程序,要經過一個對問題抽象的過程,建立起完善的數學 模型,只有這樣,我們才能建立一個設計良好的程序。從中我們不難看出計算數學在程序設計領域的重要性。恩師孟巖先生曾經撰文過若干技術書籍之四書五經,似 乎這也成了先生的標誌之一,這次冒險也湊一個……


《計算機程序設計藝術》

英文名稱:The Art of Computer Programming
作者:Donald.E.Knuth

作爲這方面的介紹,如果不介紹此書唯恐大師們笑話,它是計算機程序設計的史詩TAOCP。

Donald.E.Knuth人生最輝煌的時刻在斯坦福大學計算機系渡過,美國計算機協會圖靈獎的獲得者,是本領域內當之無愧的泰斗。被簡稱爲TAOCP的這本鉅著內容博大精深,幾乎 涵蓋了計算機程序設計算法與理論最重要的內容。現在發行的只有三卷,分別爲基礎運算法則,半數值算法,以及分揀和搜索。總共應當有7卷。以我個人對本系列 書的把握,大家除了可以如其它書籍那樣閱讀本書,也可以將其作爲計算機程序設計的字典。畢竟內容涵蓋實在是太廣泛。看本書時最關注的應當是作者嚴謹的思維 方法。每個人都有自己的讀書方法,一些大師們說應當順序讀本書,因爲它被寫得簡直就像是詩,然而這還要看大家個人的體會。至於本書的價值我覺得Bill Gates先生的話足以說明問題:“如果你認爲你是一名真正優秀的程序員讀Knuth的《計算機程序設計藝術》,如果你能讀懂整套書的話,請給我發一份你 的簡歷”。作者數學方面的功底造就了本書嚴謹的風格,雖然本書不是用當今流行的程序設計語言描述的,但這絲毫不損傷它“程序設計史詩”的地位。道理很簡 單,它內涵的設計思想是永遠不會過時的。除非英語實在有困難,否則建議讀者選用英文版。


《算法導論》

英文名稱:Introduction to Algorithms
作者:Thomas H. Cormen ,Charles E. Leiserson ,Ronald L. Rivest ,Clifford Stein

如果將TAOCP比喻成“計算機程序設計理論的荷馬史詩”,那麼被簡稱作CLRS的《算法導論》不妨稱它作 “計算機算法的聖經”。

本書的主要作者來自麻省理工大學計算機,作者之一Ronald L.Rivest由於其在公開祕鑰密碼算法RSA上的貢獻獲得了圖靈獎,目前是算法的標準教材,美國許多名校的計算機系都使用它,國內有些院校也將本書作爲算法課程的教 材。另外許多專業人員也經常引用它。由於TAOCP只出版了3卷,CLRS比較起前者來則顯得內容更爲全面,基本包含了所有的經典算法。本書程序全部由僞 代碼實現,這更增添了本書的通用性,使得利用各種程序設計語言的程序員都可以作爲參考。語言方面通俗,很適合作爲算法教材和自學算法之用。國內的很多作品 名爲數據結構,從本書中斷章取義,把數據結構與算法混爲一談,搞得作者自己都迷迷糊糊。這也是我不十分願意向大家推薦國內作品的原因。你會發現現在基本上 所有的數據結構與算法書籍都會將本書作爲參考文獻之一,更可以說明一個問題,本書是作爲讀者進行算法學習的最佳選擇。作爲本書的補充內容,我願意向大家推 薦下面的學習資料:你可以通過這個地址找到本書的所有練習答案:http://www.itu.dk/people/beetle/ 。爲了更好的學習本書中的內容,最好的指導當然是來自作者本身講述本書的課程,讀者們可以通過http://18.89.1.101/sma/5503fall2001/index5503fall2001.html 獲得課程的錄像。

有兩套優秀的書我不想作爲單獨的推薦,但作爲初學算法的高級語言程序員也不失爲極好的參考:
  Algorithms in C++以及  Algorithms in Java系列。作者都是普林斯頓大學計算機系赫赫有名的教授Robert Sedgewick, 他是TAOCP作者Donald.E.Knuth大師們下的高徒。算法理論方面並不遜色於CLRS,兩個版本分別爲C++和Java程序員量身定做。作爲 專門語言的算法書籍參考,這兩本也是我唯一願意向大家推薦的。可以作爲《算法導論》一書的補充。如果你對密碼學算法感興趣,那麼《應用密碼學》便是你的首 選。

計算機數學理論方面可推薦的書籍是相當多的,究竟哪些數學理論基礎是我們應當涉足的,哪些基本上我們是不需要的,大家可以參考《CSDN開發高手》9月刊上的《計算機科學技術數學理論淺談》,或者通過下面的地址瀏覽此文:http://www.cstc.net.cn/docs/docs.php?id=111


《離散數學及其應用》

英文名稱:Discrete Mathematics and Its Applications,Fourth Edition
作者:Kenneth H.Rosen

離散數學在計算機數學理論領域的位置顯然是首屈一指的,首先向大家推薦的就是這本。

本書的價值已經被全世界幾百所大學所證實,作爲離散數學領域的經典教材,全世界幾乎所有知名的院校都曾經使用本書作爲教材。以我個人觀點看來,這本書可以 稱之爲離散數學百科。書中不但介紹了離散數學的理論和方法,還有豐富的歷史資料和相關學習網站資源。更爲令人激動的便是這本書少有的將離散數學理論與應用 結合得如此的好。你可以看到離散數學理論在邏輯電路,程序設計,商業和互聯網等諸多領域的應用實例。考慮到大多數讀者的基礎,這裏推薦給大家的是本書的中 文版(原書第四版),本書的英文版(第五版)當中更增添了相當多的數學和計算機科學家的傳記,是計算機科學歷史不可多得的參考資料。作爲教材這本書配有相 當數量的練習。每一章後面還有一組課題,把學生已經學到的計算和離散數學的內容結合在一起進行訓練。這本書也是我個人在學習離散數學時讀的唯一的英文教 材,實爲一本值得推薦的好書。

傳統數學研究的對象過於抽象,導致對具體的問題關心不夠。爲了直接面嚮應用的需要,偉大的計算機科 學家以及數學家Donald.E.Knuth在麻省理工大學提出了“具體數學”。自從那天起,“具體數學”便成了計算機科學的基礎。所以下面爲大家推薦的 就是一本經久不衰的著作:


《具體數學—計算機科學基礎》

英文名稱:Concrete Mathematics A Foundation for Computer Science(Second Edition)

很令人興奮的就是這本書的主要作者正是泰斗Donald.E.Knuth以及他的同事Ronald L.Graham。書稿是他們在1970年的時候在計算機系教授研究生本門課程的基礎上整理出來的教材。內容上是Knuth的鉅著TAOCP第一部的擴 展,有些比TAOCP中談及地又深入了許多。重點放在高級計算機程序設計話題以及算法分析上,涉及了計算機科學領域內幾乎所有可能遇到的數學知識。具體數 學是離散數學和連續數學的綜合,書中這點做得極爲出色,介紹的內容涉及到書中許多經典問題的解答比目前廣泛流傳的解法更易懂。對於提高大家的計算數學修養 有很大幫助。之所以TAOCP有的時候讀者們讀不懂就是因爲計算數學基礎不是十分紮實,但以我個人經驗,若能對本書中內容有一個比較好的理解,會給你閱讀 如TAOCP這樣的曠世鉅著帶來很大的方便。


概言之,算法語數學乃程序設計之本,計算科學之精華,尚需吾等予以足夠的重視。有關算法與數學在計算機程序設計中的作用和地位,不妨參考我的一片拙作《計算科學數學理論淺談》,其中有較詳細的論述。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章