「算法與數據結構」從入門到進階整理推薦書單

一.入門系列

這些書籍經過圖片、打比方等通俗易懂的方法來說述,讓你能達到懂一些基礎算法,線性表,堆棧,隊列,樹,圖,DP算法,揹包問題等,不要求會實現,可是看過如下這些書對於以後實現算法打下堅實的思惟基礎。html

很適合在閒暇之餘拿出來閱讀一番。程序員

1.1 《啊哈!算法》

閱讀連接:https://book.douban.com/subject/25894685/面試

這不過是一本有趣的算法書而已。和別的算法書比較,若是硬要說它有什麼特色的話,那就是你能看懂它。算法

推薦理由: 本書中涉及到的數據結構有棧、隊列、鏈表、樹、並查集、堆和圖等;涉及到的算法有排序、枚舉、深度和廣度優先搜索、圖的遍歷,固然還有圖論中不能夠缺乏的四種最短路徑算法、兩種最小生成樹算法、 割點與割邊算法、二分圖的最大匹配算法等編程

1.2《算法圖解》

閱讀連接:https://book.douban.com/subject/26979890/數組

推薦理由:這本圖解書很容易看懂,不枯燥。 書中的前三章將幫助你打下基礎,帶你學習二分查找、大O表示法、兩種基本的數據結構以及遞歸等。餘下的篇幅將主要介紹應用普遍的算法,具體內容包括:面對具體問題時的解決技巧,好比,什麼時候採用貪婪算法或動態規劃;散列表的應用;圖算法;K最近鄰算法。數據結構

1.3《妙不可言的算法(C語言實現 第2版)》

閱讀連接:https://book.douban.com/subject/4710825/機器學習

推薦理由:理論與實踐相結合,旨在幫助讀者理解算法,並提升C語言編程能力,培養讀者的編程興趣,並鞏固已有的C語言知識。數據結構和算法

1.4《趣學算法》

閱讀連接:https://book.douban.com/subject/27109832/工具

推薦理由:很是好的一本書,圖解多,思路清晰,不只講了問題分析算法設計的過程,還講了如何優化算法, 使讀者體驗算法的奧妙

1.5《大話數據結構》

閱讀連接:https://book.douban.com/subject/6424904/

推薦理由:文中附有大量插圖,適合對大段文字提不起興趣的朋友。 以一個計算機教師教學爲場景,講解數據結構和相關算法的知識。通篇以一種趣味方式來敘述,大量引用了各類各樣的生活知識來類比,並充分運用圖形語言來體現抽象內容,對數據結構所涉及到的一些經典算法作到逐行分析、多算法比較。與市場上的同類數據結構圖書相比,本書內容趣味易讀,算法講解細緻深入,是一本很是適合自學的讀物。

1.6 《學習算法思想 修煉編程內功》

慕課網連接:https://coding.imooc.com/class/71.html

推薦理由:視頻課程,這樣精緻的課程很難找到第二個,我暫時還沒看過比這個課程能更好的進行算法入門了,小吳的PPT製做動畫靈感就是來源於此。

二.基礎系列

經過基本入門算法書的調教,你已經逐漸體會到了算法的魅力,如今正是時候去閱讀基礎系列踏入算法的領域!!!

這些書籍須要你費點心思去閱讀。

2.1《算法導論中文版》

閱讀連接:https://book.douban.com/subject/20432061/

排在基礎系列第一的位置應該沒意見吧:)

推薦理由:本書將嚴謹性和全面性融爲一體,深刻討論各種算法,並着力使這些算法的設計和分析能爲各個層次的讀者接受。

2.2《數據結構與算法 Java版》

閱讀連接:https://book.douban.com/subject/21519616/

適合想經過Java語言來學習算法的小夥伴們。

推薦理由:本書把算法分析與最有效率的Java程序的開發有機地結合起來,深刻分析每種算法,內容全面、縝密嚴格,並細緻講解精心構造程序的方法。

2.3《數據結構與算法:Python語言描述》

閱讀連接:https://book.douban.com/subject/26702568/

適合想經過Python語言來學習算法的小夥伴們。

推薦理由:本書基於Python語言介紹了數據結構與算法的基本知識,主要內容包括抽象數據類型和Python面向對象程序設計、線性表、字符串、棧和隊列、二叉樹和樹、集合、排序以及算法的基本知識。本書延續問題求解的思路,從解決問題的目標來組織教學內容,注重理論與實踐的並用。

2.4《學習JavaScrit數據結構與算法(第2版)》

閱讀連接:https://book.douban.com/subject/26639401/

適合想經過JavaScrit語言來學習算法的小夥伴們。

推薦理由:本書首先介紹了JavaScript語言的基礎知識,接下來討論了數組、棧、隊列、鏈表、集合、字典、散列表、樹、圖等數據結構,以後探討了各類排序和搜索算法,包括冒泡排序、選擇排序、插入排序、歸併排序、快速排序、順序搜索、二分搜索,還介紹了動態規劃和貪心算法等經常使用的高級算法及相關知識。

2.5《數據結構與算法分析:C語言描述(原書第2版)》

閱讀連接:https://book.douban.com/subject/1139426/

適合想經過C語言來學習算法的小夥伴們。

推薦理由:在本書中,做者更加精煉並強化了他對算法和數據結構方面創新的處理方法。經過C程序的實現,着重闡述了抽象數據類型的概念,並對算法的效率、性能和運行時間進行了分析。

2.6《數據結構與算法分析:C++描述(第3版)》

閱讀連接:https://book.douban.com/subject/1971825/

適合想經過C++語言來學習算法的小夥伴們。

推薦理由:這是是數據結構和算法分析的經典教材,書中使用主流的程序設計語言C++做爲具體的實現語言。

三.進階系列

掌握了必定的數據結構與算法的知識,如今你已是一名合格的程序員了。但若是你想要參加面試,那就須要閱讀如下書籍進行準備了。

這些書籍須要你花費時間和精力去仔細閱讀,但爲了漲薪,值得!

3.1 《劍指Offer:名企面試官精講典型編程題(第2版)》

閱讀連接:https://book.douban.com/subject/27008702/

我想,只要是程序員應該都據說過這本書吧,哪怕你沒看過。

推薦理由:《劍指Offer:名企面試官精講典型編程題(第2版)》剖析了80個典型的編程面試題,系統整理基礎知識、代碼質量、解題思路、優化效率和綜合能力這5個面試要點。

3.2《算法謎題》

閱讀連接:https://book.douban.com/subject/25805152/

推薦理由:算法是計算機科學領域最重要的基石之一。算法謎題,就是可以直接或間接地採用算法來加以解決的謎題。求解算法謎題是培養和鍛鍊算法思惟能力一種最有效和最有樂趣的途徑。

3.3《編程之法 面試和算法心得》

閱讀連接:https://book.douban.com/subject/26641732/

推薦理由:本書涉及面試、算法、機器學習三個主題。書中的每道編程題目都給出了多種思路、多種解法,不斷優化、逐層遞進。

四.工做系列

適合已經工做的程序員閱讀,能夠提高你的思惟廣度,也能夠在面試前翻一翻。

4.1《編程珠璣(第2版•修訂版)》

閱讀連接:https://book.douban.com/subject/26302533/

歷史上最偉大的計算機科學著做之一!!!

推薦理由:融深邃思想、實戰技術與趣味軼事於一爐的奇書,帶你真正領略計算機科學之美。

4.2《程序員實用算法》

閱讀連接:https://book.douban.com/subject/3923731/

推薦理由:《程序員實用算法》重點關注的是實用、當即可用的代碼,而且普遍討論了可移植性和特定於實現的細節。《程序員實用算法》做者介紹了一些有用但不多被討論的算法,它們可用於語音查找、日期、B樹和索引文件、數據壓縮、任意精度的算術、校驗和與數據驗證,而且還最全面地介紹了查找例程、排序算法和數據結構。

4.3《編程之美》

閱讀連接:https://book.douban.com/subject/3004255/

推薦理由:這本書收集了約60道算法和程序設計題目,這些題目大部分在近年的筆試、面試中出現過,或者是被微軟員工熱烈討論過。做者試圖從書中各類有趣的問題出發,引導讀者發現問題,分析問題,解決問題,尋找更優的解法。

五.大佬系列

適合大佬們踏入的領域,小吳膜拜中。

5.1《數據挖掘原理與算法》

閱讀連接:https://book.douban.com/subject/2341863/

推薦理由:內容覆蓋面最廣,除了全部書都有的內容外,還包括FOIL算法和空間數據挖掘等。

5.2《集體智慧編程》

閱讀連接:https://book.douban.com/subject/3288908/

推薦理由:很是實用的寶典,看了這本書,若是有工具,能夠解決大部分問題。

End

當你計劃開始學習一門課程、閱讀一本經典教材時,請先明確你要指望達到的目標。具體來講,就是問本身一個問題:

我指望從這本書中收穫哪些東西?

不一樣的課程、不一樣的書籍,指望的目標應該是不同的,而且是越具體越好。

好比看上面的入門系列,能夠抱着娛樂的心態在業餘時間看看。而看基礎系列,就要規劃好一段時間,邊看邊作筆記。

推薦一個金老師的學習方法給小夥伴們:多遍掃描法。

第一遍是略讀,把一本書從頭翻到尾,快速地閱讀,不深鑽細節,只看背景、結論和實際應用,即便遇到看不懂的地方也不要停下來,繼續看下去,這一遍的目的是讓你對這本書有一個整體上的印象。基於這個印象,你就能肯定全書哪裏難,哪裏易,哪裏是重點,這樣就能制定下一步的攻讀策略。

第二遍則是「細讀」與「攻讀」,選擇你感興趣的,感受最重要的內容慢慢地讀,能夠採用一些行之有效的閱讀手段(好比記要點而後嘗試回顧、繪製思惟導圖等)吸取書中的知識。對於難點,關鍵是弄明白爲何你看不懂(數學公式看不懂?關鍵術語不明白?翻譯有問題?),你就能對症下藥了,好比本書寫得太抽象,能夠先看看比較淺顯的科普類書籍,以後再回過頭來再看,或者找幾本不一樣做者寫的相似的教材對照着看……

上述過程可能須要重複幾回。而且可能先後兩次之間會間隔一個較長的時間。

人學習特定領域的知識須要一個過程,而且須要反覆的。

因此要耐心,學習是不多有可能畢其功於一役的。

歡迎關注這個會作動畫的程序員👆