數據結構與算法書籍推薦

若是計算機系只開三門課,那麼這三門課就必定是:離散數學,數據結構與算法,編譯原理。若是隻開一門課,那剩下的就必定是:數據結構與算法。Niklaus Wirth說:算法+數據結構=程序,不說廢話了,下面列出一份數據結構算法書目,先從最著名的提及 A 原書名:The Art of Computer Programming 中文名:計算機程序設計藝術 做者:Donald E.Knuth 難度:***** 我的評價:******* 推薦程度:**** 本書是算法分析的經典名做(用經典不太恰當,應該是聖經或史詩),被科學美國人列爲20世紀12大科學名著之一(和Dirac的量子力學,Einstein 的廣義相對論,von Neumann 的博弈論的著做等齊名)。其亮點在於其超乎尋常的數學技巧,要求讀者擁有極高的數學修養,只要你堅持忍耐,一旦讀懂了,你的算法和程序設計水平也會達到更高的檔次,你會對程序設計有一種大相徑庭的體會和領悟,就是「道」(Tao)。書的排版很漂亮(得益於做者的Tex系統),看起來很舒服。做者的文筆很好,寫得生動活潑,讀起來蕩氣迴腸(英文版)。習題多且精華,觸及算法和程序本質,書後有幾乎全部習題的答案(佔了整全書篇幅的1/4),書中的分析方法體現了做者嚴謹的風格。不過本書的程序不是用咱們熟悉的高級語言描述的,而是做者設計的MIX語言。整套書原計劃出七卷,如今出了三卷:基本算法,半數值算法,排序和搜索,第四卷組合算法跳票了20年,Knuth稱在2008年推出。本書有中文版,不過建議讀者選用英文版,由於都學到這個程度了,英語應該不會有大困難了。引用一句話「在咱們的有生之年,可能會看到C++的消亡,但Knuth和他的程序設計藝術,將永遠留在咱們的內心。」 B 原書名:Introduction to Algorithms 中文名:算法導論 做者:Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest,Clifford Stein 難度:*** 我的評價:***** 推薦程度:***** 本書俗稱CLRS(做者名字的簡寫),算法的經典教材,堪稱算法分析著做中的「獨孤九劍」。做者之一Ronald L.Rivest 因爲其在公開祕鑰密碼算法RSA上的貢獻得到了ACM圖靈獎。全書內容全面,結構清晰,6個部分1000多頁把數據結構算法的主要內容都包含了。做者用圖表,僞碼解釋每個算法,通俗易懂而不失嚴謹性,英文比較簡單,語言流暢,所以,與TAOCP相比,這本書更適合初學者,不要求讀者擁有很強的數學背景和豐富的編程經驗。書中習題安排合理,難度適中,在網上有所有習題的答案,網上還有做者在MIT講述本書的課程的錄像,可謂資源豐富,值得注意的是書中每一章後面都有一個Chapter notes,瞭解一下歷史,看一下做者推薦的材料是不錯的(若是你能找到的話)。 C 原書名:The Design and Analysis of Computer Algorithms 中文名:算法設計與分析 做者:Aho,Hopcroft,Ullman 難度:**** 我的評價:***** 推薦程度:***** 該書寫於1976年,做者Hopcroft是 1986年ACM圖靈獎得主,這三我的寫過不少書,大多數都是經典,於通常的算法書不一樣,該書側重於證實算法的正確性和複雜性,而不是怎樣實現和應用算法,敘述上更加形式化,屬於定義-引理-定理的數學書風格,認真研究一下里面的證實能大大提升理論水平。若是你看完了CLRS或其餘數據結構入門書,要深刻學習算法,但TAOCP看起來又太吃力的話,這本比較適合。最後一點是書中的習題很精華,即便你不看這本書,作一下里面的習題也是很是有意思的 D 原書名:Data Structures and Algorithms 中文名:數據結構與算法 做者:Aho,Hopcroft,Ullman 難度:*** 我的評價:**** 推薦程度:**** 上面那本書的姐妹篇,內容就簡單不少了,該書寫法有個特色就是每個主題都從一個基本的觀念出發,而後再逐漸深刻討論,這樣作能使解釋更清晰,富有啓發性。不過這本書寫於20年前,因此有一些高級內容如紅黑樹是沒有的,拿這本書作教材的讀者最好同時拿一本較新的來作參考。 E 原書名:Algorithms in C,Algorithms in C++,Algorithms in Java 中文名:算法I-IV(C實現),算法V(C實現)(C++實現)(Java實現) 做者:Robert Sedgewick 難度:*** 我的評價:**** 推薦程度:**** Robert Sedgwick是Knuth的學生,如今是princeton的教授。這是三個系列,與上面用僞碼描述算法不一樣,本書用現今流行的語言C,C++,Java描述.那麼選拿哪種語言好呢?從算法的角度看,任何高級語言都是沒區別的,雖然實現算法的時候,到了語言相關的層面會有一些細微區別,但影響不大。我的推薦C++的,由於價錢最便宜:)。本書的一個特色就是例子取得很好,代碼很清晰。有中文版 F 原書名:Algorithms Design Techniques and Analysis 中文名:算法設計技巧與分析 做者:M.H.Alsuwaiyel 難度:**** 我的評價:**** 推薦程度:**** 這本書對通常算法書較少涉及的機率算法和近似算法做了重要的補充 G 原書名:Introduction to The Design & Analysis of Algorithms 中文名:算法設計與分析基礎 做者:Anany Levitin 難度:*** 我的評價:**** 推薦程度:**** 算法書的另外一種寫法,以方法爲主線,如Brute-Force, Divide-and-Conquer, Greedy techniques,書裏面有不少有趣的習題 H 原書名:Data Structures, Algorithms, and Applications in C++ 中文名:數據結構算法與應用-C++語言描述 做者:Sartej Sahni 譯者:汪詩林等 難度:*** 我的評價:*** 推薦程度:*** 很多人推薦這本書,但我我的以爲這書不怎麼樣,中文版翻譯水平差強人意,數據結構算法部分把該講的都講了,但沒什麼突出的地方,反而C++倒說了很多,代碼的水平也不怎麼樣。從ACCU的評價上看,書中的實現與BOOST和STL相比相去甚遠。不過這書有不少實際問題,能夠看一看。 I 原書名: 中文名:算法與數據結構 做者:傅清祥 王曉東 難度:*** 我的評價:**** 推薦程度:**** 這本是國人寫的最好的數據結構算法書之一,講得很細緻。最後的三章:複雜性,並行算法,高級專題有一些有趣的東西,是這些高級內容的很好的導論。 J 原書名: 中文名:數據結構(C語言版) 做者:嚴蔚敏 吳偉民 難度:*** 我的評價:*** 推薦程度:*** 另外一本寫的較好的中文數據結構算法書,這本書特別適合考試用(沒有任何輕視的意思) 上面的書適合哪些人(我只是學生,這只是我的意見) 作學術研究:A+C+F 學過初級課程要深刻:C+F+(I後三章) 在職或講求實用:E 入門:B或D 程序設計競賽:B+G+(I前八章) 考研或程序員考試:J