計算機程序設計的史詩TAOCP

倘若你去問一個木匠學徒:你需要什麼樣的工具進行工作,他可能會回答你:“我只要一把錘子和一個鋸”。但是如果你去問一個老木工或者是大師級的建築師,他會告訴你“我需要一些精確的工具”。由於計算機所解決的問題都是從生活中抽象出來的問題,其複雜性不言而喻,所以我們需要這樣精確有效的工具去解決現實生活中的複雜問題。算法、數據結構都是程序設計中必不可少的精確工具。算法的重要性是每一個程序員都十分清楚的。
  程序設計當中解決得相當一部分問題都會涉及各種各樣的科學計算,這需要程序員具有什麼樣的基礎呢?實際問題轉換爲程序,要經過一個對問題抽象的過程,建立起完善的數學模型,只有這樣,我們才能建立一個設計良好的程序。從中我們不難看出計算數學在程序設計領域的重要性。
  算法與計算理論是計算機程序設計領域的靈魂所在,是發揮程序設計者嚴謹,敏銳思維的有效工具。任何的程序設計語言都試圖將之發揮得淋漓盡致。作爲計算機專業軟件相關無可厚非的最重要基礎類核心課程,我們首先對於這個領域的優秀參考進行一個推薦。
  作爲這方面的介紹,如果不介紹下面這本唯恐大師們笑話,即是計算機程序設計的史詩TAOCP:
  《計算機程序設計藝術》
  包含:《 計算機程序設計藝術 第1卷 基本算法 (第3版) 》、《 計算機程序設計藝術 第2卷 半數值算法(第3版) 》、《 計算機程序設計藝術 第3卷 排序與查找 (第2版) 》
  英文名稱:The Art of Computer Programming
  作者:Donald.E.Knuth
  Donald.E.Knuth人生最輝煌的時刻在斯坦福大學計算機系渡過,美國計算機協會圖靈獎的獲得者,是本領域內當之無愧的泰斗。被簡稱爲TAOCP的這本鉅著內容博大精深,幾乎涵蓋了計算機程序設計算法與理論最重要的內容。現在發行的只有三卷,分別爲基礎運算法則,半數值算法,以及分揀和搜索。總共應當有7卷。以我個人對本系列書的把握,大家除了可以如其它書籍那樣閱讀本書,也可以將其作爲計算機程序設計的字典。畢竟內容涵蓋實在是太廣泛,相當的內容未見得你能夠用上,還是那句話,按需吧。看本書時最關注的應當是作者嚴謹的思維方法。每個人都有自己的讀書方法,一些大師們說應當順序讀本書,因爲它被寫得簡直就像是詩,然而這還要看大家個人的體會。至於本書的價值我覺得Bill Gates先生的話足以說明問題:“如果你認爲你是一名真正優秀的程序員讀Knuth的《計算機程序設計藝術》,如果你能讀懂整套書的話,請給我發一份你的簡歷”。作者數學方面的功底造就了本書嚴謹的風格,雖然本書不是用當今流行的程序設計語言描述的,但這絲毫不損傷它“程序設計史詩”的地位。道理很簡單,它內涵的設計思想是永遠不會過時的。除非英語實在有困難,否則建議讀者選用英文版。
  如果將TAOCP比喻成“計算機程序設計理論的荷馬史詩”,那麼被簡稱作CLRS的《算法導論》不妨稱它作 “計算機算法的聖經”。
  《 算法導論(第二版影印版) 》
  英文名稱:Introduction to Algorithms
  作者:Thomas H. Cormen ,Charles E. Leiserson ,Ronald L. Rivest ,Clifford Stein
  本書的主要作者來自麻省理工大學計算機,作者之一Ronald L.Rivest 由於其在公開祕鑰密碼算法RSA上的貢獻獲得了圖靈獎。這本書目前是算法的標準教材,美國許多名校的計算機系都使用它,國內有些院校也將本書作爲算法課程的教材。另外許多專業人員也經常引用它。本書基本包含了所有的經典算法,程序全部由僞代碼實現,這更增添了本書的通用性,使得利用各種程序設計語言進行程序開發的程序員都可以作爲參考。語言方面通俗,很適合作爲算法教材和自學算法之用。國內的很多作品名爲數據結構,從本書中斷章取義,把數據結構與算法混爲一談,搞得作者自己都迷迷糊糊。這也是不十分願意向大家推薦國內作品的原因。你會發現,現在基本上所有的數據結構與算法書籍都會將本書作爲參考文獻之一,更可以說明一個問題,本書是作爲讀者進行算法學習的最佳選擇。作爲本書的補充內容,我願意向大家推薦下面的學習資料:你可以通過這個地址找到本書的所有練習答案:http://www.itu.dk/people/beetle/ 。爲了更好的學習本書中的內容,最好的指導當然是來自作者本身講述本書的課程,讀者們可以通過下列地址獲得課程的錄像。
  http://18.89.1.101/sma/5503fall2001/index5503fall2001.html
  哦,你也許會對我說:“天哪,《 算法導論(第二版影印版) 》上面都是僞代碼,我程序設計功底沒有那麼強啊”。是的,對於大部分的大學生來說的確存在一個很嚴峻的問題,就是程序設計還沒有堅實的基礎,而你此時需要掌握一些算法知識,那麼這個時候一本帶有理論的具體語言實現的指導教材便是絕佳的參考:
  《 算法Ⅰ-Ⅳ(C++實現)——基礎、數據結構、排序和搜索(第三版) 》
  此書屬於Algorithms in C++系列中的一本。作者都是普林斯頓大學計算機系赫赫有名的教授Robert Sedgewick, 他是Donald.E.Knuth大師們下的高徒。算法理論方面並不遜色於CLRS,對於初學者來說附帶理論關鍵部分的原程序是個很好的參考,這系列書提供了兩個語言版本:分別爲C++和Java程序員和學習者量身定做。Java版本的叫做Alogorithms in Java,國內清華大學出版社引進了本書並出版了影印版:《 JAVA算法(影印版)(第3版 第1卷) 》。作爲專門語言的算法書籍參考,這兩本也是我唯一願意向大家推薦的。可以作爲《算法導論》一書的補充。
  計算機數學理論方面可推薦的書籍是相當多的,究竟哪些數學理論基礎是我們應當涉足的,哪些基本上我們是不需要的,大家可以參考《CSDN開發高手》9月刊上的《計算機科學技術數學理論淺談》,或者通過下面的地址瀏覽此文:http://www.cstc.net.cn/docs/docs.php?id=111
  離散數學在計算機數學理論領域的位置顯然是首屈一指的,首先向大家推薦的就是:
  離散數學在計算機數學理論領域的位置顯然是首屈一指的,首先向大家推薦的就是:
  《 離散數學及其應用(原書第4版) 》
  英文名稱:Discrete Mathematics and Its Applications,Fourth Edition
  作者:Kenneth H.Rosen
  本書的價值已經被全世界幾百所大學所證實,作爲離散數學領域的經典教材,全世界幾乎所有知名的院校都曾經使用本書作爲教材。以我個人觀點看來,這本書可以稱之爲離散數學百科。書中不但介紹了離散數學的理論和方法,還有豐富的歷史資料和相關學習網站資源。更爲令人激動的便是這本書少有的將離散數學理論與應用結合得如此的好。你可以看到離散數學理論在邏輯電路,程序設計,商業和互聯網等諸多領域的應用實例。考慮到大多數讀者的基礎,這裏推薦給大家的是本書的中文版(原書第四版),本書的英文版(第五版)當中更增添了相當多的數學和計算機科學家的傳記,是計算機科學歷史不可多得的參考資料。作爲教材這本書配有相當數量的練習。每一章後面還有一組課題,把學生已經學到的計算和離散數學的內容結合在一起進行訓練。這本書也是我個人在學習離散數學時讀的唯一的英文教材,實爲一本值得推薦的好書。
  《 具體數學:計算機科學基礎(英文版.第2版) 》
  英文名稱:Concrete Mathematics A Foundation for Computer Science(Second Edition)
  作者:Ronald L.Graham,Donald E.Knuth,Oren Patashnik
  傳統數學研究的對象過於抽象,導致對具體的問題關心不夠。爲了直接面嚮應用的需要,偉大的計算機科學家以及數學家Donald.E.Knuth在麻省理工大學提出了“具體數學”。自從那天起,“具體數學”便成了計算機科學的基礎。所以下面爲大家推薦的就是一本經久不衰的著作:
  英文名稱:Concrete Mathematics A Foundation for Computer Science(Second Edition)
  很令人興奮的就是這本書的主要作者正是泰斗Donald.E.Knuth以及他的同事Ronald L.Graham。書稿是他們在1970年的時候在計算機系教授研究生本門課程的基礎上整理出來的教材。內容上是Knuth的鉅著TAOCP第一部的擴展,有些比TAOCP中談及地又深入了許多。重點放在高級計算機程序設計話題以及算法分析上,涉及了計算機科學領域內相當全面的數學知識。具體數學是離散數學和連續數學的綜合,書中這點做得極爲出色,許多經典問題的解答比目前廣泛流傳的解法更爲通俗易懂。對於提高大家的計算數學修養有很大幫助。之所以TAOCP有的時候讀者們讀不懂就是因爲計算數學基礎不是十分紮實,但以我個人經驗,若能對本書中內容有一個比較好的理解,會給你閱讀如TAOCP這樣的曠世鉅著帶來很大的方便。
  作爲計算機專業的學生,大概至少都曾經聽說過ACM-ICPC程序設計大賽,這也是至今爲止代表着全世界最高水平的程序設計大賽。每年國內也有很多學生參加此賽事,然而此賽事涉及面之廣令不少人望而卻步,也正是因爲比賽涉及的計算理論內容之深廣,才使大賽的水平得到了全世界的認可。如果你也在準備這方面的比賽,除了上面的《計算機程序設計藝術》你不是必須參考外,都應當予以足夠的重視,此外下面這本書也是不錯的選擇:
  《 算法藝術與信息學競賽 》
  哦,是的,劉汝佳和黃亮,這兩個名字對於曾經關注過NOI,IOI以及ACM-ICPC比賽的你來說一定不是陌生的名字,也可以這樣說,他們是在這些比賽以及相關培訓中相當活躍的兩個人,由於書的作者號召力相當大,我在這本書出版後很快就買到了並進行了研讀。內容涉及上述三種比賽,算法原理闡述扼要,內含大量比賽原題,題庫中的經典試題以及各個著名院校隊伍自擬的優秀算法題。主要內容分爲:算法與數據結構,數學知識和方法以及計算幾何學。是一本算法與計算理論相關較爲完善的資料結集。2003年如果你還苦於公開出版的相關書籍版本太老,沒有新內容,那麼本書便是你近期參加NOI,IOI以及ACM-ICPC比賽的不二選擇。
  概言之,算法與數學乃程序設計之本,計算科學之精華,尚需同學們予以足夠的重視。但有一點需指明,不論是理論計算科學還是程序設計,皆通一理:不是所有的內容都需要大家掌握,長遠之計乃是在大學學習相關學科的時候對該學科有一個全攬,曉之用途,在自己極爲感興趣或者研究、開發需要的時候深入其中……

發佈了6 篇原創文章 · 獲贊 13 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章