哪本《數據結構與演算法》最好?

想問問過來人個選書問題,我是一名大三的學生,我們大二上半學期學了這門課,但使用的是嚴蔚敏的課本,覺著不好,習題集答案還不全,後來發現有本《數據結構與演算法》不錯,是機械工業出版社的(就是那個有第一版和第二版的,第二版是清華出的,翻譯很不好的那本書),但是這本書有那麼多的習題,竟然沒答案,想問問大神們,有沒有好一些的書推薦一下,最好還有答案書的?


根據自己的經驗:

《演算法(第四版)》:給出了程序員應知應會的50個演算法

推薦理由:

1. 極其優雅的代碼實現,對編程水平的提高有極大的幫助。

2. 演算法深入淺出,尤其是紅黑樹的講解,非常精彩。對演算法水平的提高有極大幫助。

上述是我認為最重要的理由,當然題主要求的代碼和重要習題答案官網都有(部分習題)。

正如這本書介紹的,給出程序員應知應會的50個演算法,我認為作者的意圖是讓程序員建立自己的工具包,隨時隨用,從而實現在更高抽象層次上高效的編程。工程性的目的更強一些。所以沒怎麼講述演算法分析和演算法設計方面的內容,例如動態規劃就沒講。

--------------------------------------------------------------------------------------------------------------------------------------

如果說《演算法》勝在工程性,那《演算法導論》勝在理論性。

《演算法導論》的重點放到演算法正確性證明和演算法分析上(雖然《演算法》中也有,但不是作為重點來講解的),讓人牢牢記住了循環不變式證明和反證法證明。同時《演算法導論》也講述了演算法設計方面的內容,雖然不如《演算法設計》那麼專業,但是應該足夠平時的使用。

《演算法導論》極其經典,由於與《演算法》的書寫重點不同,所以沒有《演算法》的上述優點。

建議:先看《演算法》,如果意猶未盡,看《演算法導論》


我去年剛學演算法的時候,聽信了知乎各路大神的推薦,買了那本厚厚的《演算法導論》。雖然它又黑又丑又重又貴,但當時我時常抱著它去圖書館去教室上床下床……絲毫沒有嫌棄。

數據結構課上,看著同學們掏出薄薄的嚴蔚敏,我總是微微一笑,一股優越感油然而生。

這或許就是知識的重量吧,當時的我這樣想,45度望向窗外的天空,順手揉了揉肩。

然而裝嗶的時光總是快樂而短暫。看完第一章後我的進度就越來越慢。冗長的證明,晦澀的公式,讓我這個數學學渣渾身難受。百度來的代碼質量參差不齊,又憑空增加了不少麻煩。

後來被逼學會了翻牆,學會了Google, 翻Stackoverflow,翻維基百科。《演算法導論》更多的反倒成為了一個大綱,列出我需要學習的演算法和知識點,但卻並不一定在書中解決他們。

現在,《演算法導論》依然在我手邊的書架上,時不時的想不起一個演算法,馬上拿出來翻一翻,確實能夠有更多理解,也逐漸能體會到他們的數學描述中蘊含的美。

但是若要我回到一年前那個躁動的午後,看看那個刷著知乎的,喜歡裝嗶的自己

我覺得

我至少會選一本有附代碼的書(?Д`)


如果是想入門,推薦程傑的《大話數據結構》,沒有太多的生搬硬套,語言幽默風趣,口語化的說教。很難想像在公交車或者地鐵上讀嚴蔚敏的數據結構,但是我的的確確在地鐵上(半個小時),讀完了程傑兄兩章《大話》,個人看法。如果有興趣,可以去下載個電子版《大話數據結構_免費高速下載》的先看看。


國外很多經典的

(因為以前搞ACM時都是用的C/C++,所以推薦的都是偏這塊的)

演算法導論就不說了,圖文並茂。

數據結構與演算法分析 (豆瓣) C

數據結構與演算法分析 (豆瓣) C++

數據結構與演算法分析 (豆瓣) 同上本,英文版

Weiss 的這幾本書都不錯,如果想順便學 C++ Template,建議看C++版的(後兩本)


看到這個問題我立馬想到了鄧俊輝老師的數據結構,而且配套有mooc,適合題主。


個人覺得最適合入門的應該是Robert Sedgewick的《Algorithms》,這本書也有中文版,Coursera上有相應的視頻:

演算法,第一部分:Coursera - Free Online Courses From Top Universities

演算法,第二部分:Coursera - Free Online Courses From Top Universities

還有本書配套網站:http://algs4.cs.princeton.edu/home/

2017.05.25更新:

推薦一個可視化的網站,對學習數據結構和演算法應該有幫助。

visualising data structures and algorithms through animation


演算法有很多經典的書,什麼《計算機程序設計的藝術》啊,《演算法導論》啊。

但是,我覺得,最適合絕大多數人的是:

演算法:C語言實現 (豆瓣)

這麼說吧,有些人自己牛逼,有些人表達能力強,Robert Sedgewick 兼有之。而且,演算法:C語言實現 (豆瓣) 是作者直接用C語言實現,拿過來一行不改就可以跑的,不像其他書給出偽代碼。當然,很多人可能很不屑,但是,我相信對新同學學習會更有幫助。因為,一方面直接給出代碼可以減輕大家學習的負擔,另一方面也方便大家了解大神是怎麼寫代碼的。比如,這本書裡面的堆排序,簡直優美,是我活了幾十年見過的最美的堆排序。


大數據就是這麼任性第一季數據結構和演算法
百度網盤地址:http://pan.baidu.com/s/1o7TIOwq 密碼: xm6a

涉及內容;數據結構、演算法、鏈表、隊列、二叉搜索樹、DAG、B+樹、LSM樹、堆排序、跳錶、排序、哈希表、搜索引擎索引、資料庫索引、文件索引、倒排索引、點陣圖法、三路快速排序、多路歸併排序、外部排序、連通圖、平衡樹

這門課程是針對大數據工程師和雲計算工程師的基礎課程,同時也是所有計算機專業人士必須掌握的一門課程。如果不掌握數據結構和演算法,你將難以掌握高效、專業的數據處理手段,更難以從容應對複雜的大數據處理場景。
課程主要內容:
1.數據結構和演算法概述
2.數組、鏈表、隊列、棧等線性表
3.二叉樹、BST、AVL樹及二叉樹的遞歸與非遞歸遍歷
4.B+樹
5.跳錶
6.圖、圖的存儲、圖的遍歷
7.有向圖、無向圖、懶惰與積極的普利姆演算法、克魯斯卡爾演算法及MST、單源最短路徑問題及Dijkstra演算法
8.並查集與索引式優先隊列、二叉堆
9.遺傳演算法初步與TSP問題
10.內部排序(直接插入、選擇、希爾、堆排序、快排、歸併等)演算法與實踐中的優化
11.外部排序與優化(文件編碼、數據編碼、I/O方式與JVM特點、多線程、多路歸併等)
12.哈希表、Trie樹、倒排索引、分散式索引初步(Map-Reduce)

一、簡介
第1講:什麼是數據結構?
第2講:什麼是演算法?

二、線性表
第3講:線性表(數組、鏈表、隊列、棧)
第4講:Linux work queue及JDK線程池

三、樹
第5講:非線性結構、樹、二叉樹
第6講:平衡樹、AVL樹
第7講:B+樹與資料庫索引

四、圖
第8講:圖的概念與存儲
第9講:圖的遍歷
第10講:最小生成樹(MST)、Prim演算法、Kruskal演算法
第11講:單源最短路徑與Dijkstra演算法
第12講:用遺傳演算法近似求解TSP問題

五:排序
第13講:選擇排序、插入排序、希爾排序
第14講:堆排序、優先隊列
第15講:快速排序及優化
第16講:歸併排序及優化
第17講:歸併排序與外部排序
第18講:外部排序的優化及延伸

六:查找
第19講:哈希表、二分查找、Trie樹、Ternery樹、搜索引擎與倒排索引、集中式索引與分散式索引、Map-Reduce初步


必須推清華鄧俊輝老師的啊,敢說是國內墜吼了!

鄧公的《數據結構(C++語言版)》

配套的《習題解析》

學堂在線還有MOOC,搭配4次PA作業(每次4道題,類似信息競賽)


對於剛接觸演算法的人來說,反對前面提及的《演算法導論》 這樣的巨著,不是不好,是現在沒那能力消受。不同的時期學不一樣的東西。

從寫鏈表開始,一步一步的寫代碼吧。

對剛學數據結構,推薦數據結構與演算法視頻


《大話數據結構》

無論是考研還是單純的學習,這本書都是不錯的選擇,講解通俗易懂,書中的代碼都是可執行的源碼,很適合初學者和沒有系統學習過數據結構的人。

另,如果找工作的話,建議刷一下《劍指offer》,上面有很多常用演算法題,對找工作很有幫助。


如果你想要入門上手不吃力,學的很開心時不時笑出聲,學會不少乾貨、獲得一本以後還能隨時使用的「演算法速查詞典」的同時還培養進一步學習興趣的話,有一本神書適合你。

The Algorithm Design Manual

個人認為這本書是經典演算法類書籍中最適合自學的一本,寫的非常生動(有不少作者和他的學生當年實際用演算法解決工程問題的例子等)、詼諧,而且知識組織的很合理,只要你不會被英文卡住的話,基本很快就能看完一遍用來閱讀的第一部分,基本掌握原理知識,然後第二部分演算法詞典可以作為工具書今後使用。另外這本書不依賴數據結構,它會先把需要用到的數據結構簡單梳理一遍。

優點:非常好看,讀起來酣暢淋漓;非常注重實用,教你演算法的同時給你它在解決實際問題的時候真格派上用場的例子;條理清晰,可以作為工具書使用

缺點:缺少《演算法導論》式的嚴密分析和證明,如果有需要可以在讀完這本之後閱讀演算法導論;沒有中文版,當然這並不重要。


聖經……


演算法精解(C語言描述),涉及C語言,數據結構,演算法。有原理,有實現。親情推薦!


推薦《數據結構 演算法與應用》c++版的,講的很細,也有部分代碼。演算法導論可能是我太弱,還是看這個舒服~


數據結構與演算法,c語言描述,

看了好幾遍,基礎教材里很不錯的一本。


怎樣學演算法?


目前正在學習數據結構,用的是 "Algorithms 4th" 配合 coursera 公開課。因為只會 C,又借了一本 "Data Structures and Algorithm Analysis in C" ,有時候不知道為什麼出 bug 時可以參考。對數據結構本身有不懂的地方時,我會參考演算法導論。不得不說演算法導論講得最詳細,有問題時看看演算法導論基本都能明白。


我倒覺得沒這麼一說,只要行動起來,在學習過程中自己就領悟到了。


演算法導論就不提了~

想說另外一本小眾的《演算法概論 》

沒有演算法導論比較偏數學的證明,更多地是思想,推薦給科班的入門


推薦閱讀:

機器學習演算法庫推薦?
程序語言中的取余是如何實現的?
怎樣快速求出前1到n中某一個素因子x出現的次數?

TAG:書籍推薦 | 演算法 | 數據結構 | 演算法設計 | 演算法與數據結構 |