計算機演算法領域有哪些書籍像《演算法導論》一樣經典?

經典書籍要滿足如下幾點:

1、內容組織合理,各知識點循序漸進,讓讀者漸入佳境;

2、講述方式合理,不僅讓讀者知其然,還要知其所以然;

3、影響力廣,經得起推敲,嚴謹但不失趣味;

說明:計算機經典書籍很多,題主並無計劃全面閱讀。目前在學習演算法,本題僅考慮演算法書籍,謝謝。

今天無意中查到一本《演算法分析導論》,比較符合題主的下一步關注點,不知道有沒有童鞋讀過~


補充一下,關於樓上提到的 Algorithms by Dasgupta, Papadimitriou, Vazirani。

下面引述尹一通老師在豆瓣的書評:演算法之美 (評論: Algorithms)

三位作者可謂野心勃勃,幾乎是膽大妄為。他們對傳統演算法教學思路的顛覆和背叛可謂前所未有。剛拿到目錄的時候,我就替他們捏了一把汗,覺得這哪裡像一本「正經」的演算法書。可讀下來,卻不由得佩服——演算法書早該這麼寫了。

他們並沒有要全面的收錄各種各樣的演算法,他們做的事情是理清了一條演算法這門學問的線索。因此填鴨式的內容灌輸不是這本書的目的;對結構的精心安排,對問題的數學結構的剖析、從而推出一個演算法的過程的講解,都體現除了這本書真正的用心:它要讓學生獲得最大程度的啟發,要訓練學生獨立解決問題的能力。

我覺得這才是教育的真正目的,也是演算法課應該追求的目標。

另外,引述尹老師關於三位作者的評價:

書的三位作者:Sanjoy Dasgupta, Papadimitriou, Umesh Vazirani。

其中,Umesh堪稱計算機理論界的第二名師(第一名師是他自己的導師Manuel Blum),他帶過的學生們猶如一個理論計算機科學新生代的全明星隊。另一個作者Papadimitriou可算是理論界的第二名筆(第一非Knuth莫屬),他的書Computational Complexity和Combinatorial optimization堪稱理論計算機科學最好讀的專業書,他業餘還寫了本小說"Turing"。第三個作者Dasgupta是個演算法方向的研究者,他最年輕,本身就是Umesh的學生,相比前面二位也沒什麼噱頭——可他註定要因這本Algorithms而被載入計算機科學的史冊。

最後,同樣推薦尹老師在豆瓣寫的幾篇書評,都很值得一讀。

最後的最後,關於這本 Probability and Computing, by Mitzenmacher and Upfal. 推薦尹老師的 Lecture Notes,他在南大和交大都開過課:隨機演算法 (Spring 2014)。

類似的演算法分析技術並不僅僅看起來精巧無比,而且同樣是有力而深刻的工具。譬如量子演算法中的隨機性,其實就可以視作一種概率分布,關於量子計算最初的不少想法,就是如此這般「繞過」了量子力學。


看過的演算法領域還不錯的教材有

Algorithms by Dasgupta, Papadimitriou, Vazirani.

通俗易懂,深入簡出,內容雖然沒有演算法導論多,但是覺得講解質量要高一些。

Approximation Algorithms, by Vazirani.

近似演算法最經典的教材,雖然比較老,不過個人認為是最好的。

Probability and Computing, by Mitzenmacher and Upfal.

本科生教材,包含了隨機演算法最基礎的內容,比Randomized Algorithms這本書要淺,但是寫的好多了,非常適合自學。


題外話:說真的我想知道現在知乎上大家好好看題真的這麼困難了么?這個樓下面的好多答案都是什麼鬼啊……題主要求計算機演算法領域的書,一本講程序語言的書居然被頂到了最高贊,我真是無語了。

首先 @Climber.pi 和 @馬也 的回答很好,我不重複列舉了。

但我還想到了幾個補充的,權且拋磚引玉。

Randomized Algorithms by Rajeev Motwani / Prabhakar Raghavan

這本書可以看作 Probability and Computing 的進階版吧,習題超難,但如果有興趣的話非常值得一做。

The Design of Approximation Algorithms by David P. Williamson / David B. Shmoys

近似演算法除了 Vazirani 那本名著之外另一本很好的書。

Algorithm Design by Jon Kleinberg / éva Tardos

除了演算法導論之外的又一名著,好像從哪裡看到一個說法說 CLRS KT DPV 是演算法領域最好的三本教材。

An Introduction to the Analysis of Algorithms by Robert Sedgewick / Philippe Flajolet

最後是題主提到的這本書,我最初了解它是因為 Sedgewick 在 Coursera 上開了兩門課,我看了一下,這本書其實是講 Generating function 的,以及如何用 GF 分析組合結構。我讀的不太仔細,但好像難度不大,這兩位作者有另一本巨著 Analytic Combinatorics,推薦一起食用風味更佳。


重複的不多說了。

《Combinatorial Optimization: Algorithms and Complexity》 by Christos Papadimitriou, Kenneth Steiglitz

《Combinatorial Optimization: polyhedra and efficiency》 by A. Schrijver and William J. Cook

《Parameterized Algorithms》 by Daniel Lokshtanov, Dániel Marx, Fedor V. Fomin, Marek Cygan, and Saket Saurabh

《Algorithmics of Matching under Perfernces》by David F. Manlove

@馬也 對Vazirani的Approximation Algorithms持否定態度。原因是:這本書到從中間比較重要部分基本是論文集,雖然成果是他自己的,但也不好把論文幾乎原封不動的縮寫摘抄到書里。最後基本是讀原paper。遠沒有《The Design of Approximation Algorithms》 by David P. Williamson / David B. Shmoys來得有誠意啊!後面這本基本是開卷有益。

當初學的學習和參考書,除了最下面和最上面兩本,其它的基本吃灰中。 最上面的一本不滿足題主條件,它寫得太簡略略抽象,故不列出。


推薦algorithm design,覺得algorithm design比演算法導論好用,美國研究生演算法課很多都用前一本書了。


計算機演算法領域有一本書幾乎所有的論文和書籍都會引用,那就是:

《The Art Of Computer Programming》,簡稱TAOCP.

Ps:好多答案說的明顯不是演算法領域的書啊,csapp,sicp之流經典是經典,但不是演算法領域。


《演算法》,紅色封面的書,書中以java語言講述,但第一章會對java有簡單介紹,語言不是問題。

書中講解很通俗易懂,配圖很多;api設計很厲害,環環相扣;對時間複雜度以及演算法的改進也會提及;而且不同於其他演算法書,該書就分排序,查找,圖,字元串幾章,比較有針對性。

特別推薦本書對紅黑樹的講解,從二叉查找樹到2-3樹再到紅黑樹,會對其有個很形象的理解。

不過該書沒有講述演算法思想,譬如動規,分治,這些還是得看演算法導論。總體來說還是一本很不錯的書


1:taocp 懷疑推薦這本書的人翻過這本書沒有,也許很經典吧,但演算法實現用的MIX,如果真的一點點看完這本書不知道是不是有點得不償失。

2:演算法 塞奇威克的 適合初學者入門,裡面圖片講解特別仔細,比較注重實踐(輕證明),java代碼。(我紅黑樹就是看了這本書以後才明白的..)

3:數據結構和演算法分析 c語言描述 維斯的 注重實踐,證明比較詳細,需要有一些c語言基礎(define)

4:演算法引論(我在學校圖書館裡找到的,貌似沒幾個人看過)理論多,講解經典,書不厚300+,想完全看完需要時間,因為習題很多..(不太需要代碼量,反倒需要一定數學基礎,注重演算法思維,沒有前兩本提升代碼能力)

5:演算法設計與分析基礎 把演算法分為了減治 分治 變治。證明超詳細..第一次發現數學好重要(封面挺萌的)

6:演算法概論 據說很經典 沒看過 不評價

7:演算法導論 大家都知道哈

以上。


演算法第四版


先推薦一本:演算法引論 https://book.douban.com/subject/1436134/#!/i!/ckDefault 其他的可以洗洗睡了


看錯了,題主說的是演算法書,其他三個就刪掉好了:

塞奇威克的《演算法》第四版:感覺比演算法導論更適合入門,彩色的圖示以及清晰的Java代碼,我認為先讀這本書再讀演算法導論更合適。配合coursera上面第演算法1演算法2課程食用更佳,讓你知道這些演算法真正能做什麼,完爆國內大學的演算法和數據結構課程。


我就強答一句

程序員必讀書單 1.0

看完回來記得給我點贊!


推薦圖裡的書


《演算法導論》確實是一本計算機演算法領域的神書,但卻不是一本好的入門書,很多程序員在給新人推薦演算法書的時候,喜歡推薦這本。導致的後果就是新人從此再也不讀演算法書了,老老實實做初級碼農去了,這樣很不好。

如果是希望學習演算法和數據結構,我覺得最好的入門書應該是 《演算法》

再推薦一個演算法學習書單吧:演算法與數據結構的5本推薦書籍

最後,關於學習演算法的方法,可以看一下我的另一個回答:知乎用戶:推薦一本編程演算法書籍,你推薦哪本?


「演算法的樂趣」講真還不錯。


補充一本中文講近似演算法的,《近似演算法的設計與分析》,作者堵丁柱等。


The Art of Computer Programming 裡面其實基本都是演算法了


演算法設計手冊 the algorithm design manual


小女子太弱,演算法入門一竅不通

求大神指導

某211學校計算機大二在讀T^T

感覺大學快過不下去了

任務重T^T壓力大頭髮快掉光


這本吧,應該算是相關書籍中比較好的了。注意要看修訂版。現在(2016年),實際環境中單線程單進程的程序已經很少了。演算法導論裡面的大部分內容相對來說都是較為古典的,這類書可以作為一個補充。


推薦閱讀:

md5會有重複的可能嗎?
平滑的戰爭迷霧效果是如何實現的?
為什麼說平均情況下,插入排序比選擇排序快?
PageRank 演算法的複雜程度怎麼樣?
越來越多的群體智能演算法(蛙跳演算法、貓群演算法、蟑螂演算法等等)有存在的必要嗎?

TAG:演算法 | 演算法導論書籍 | 經典書籍 |