1. 程式人生 > >有關資料結構與演算法方面的經典書籍推薦

有關資料結構與演算法方面的經典書籍推薦

如果計算機系只開三門課,那麼這三門課就一定是:離散數學,資料結構與演算法,編譯原理。

如果只開一門課,那剩下的就一定是:資料結構與演算法。

下面列出一份資料結構演算法書目,先從最著名的說起

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