一.入門系列
這些書籍通過圖片、打比方等通俗易懂的方法來講述,讓你能達到懂一些基礎演算法,線性表,堆疊,佇列,樹,圖,DP演算法,揹包問題等,不要求會實現,但是看過以下這些書對於之後實現演算法打下堅實的思維基礎。
很適合在閒暇之餘拿出來閱讀一番。
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
當你計劃開始學習一門課程、閱讀一本經典教材時,請先明確你要期望達到的目標。具體來說,就是問自己一個問題:
我期望從這本書中收穫哪些東西?
不同的課程、不同的書籍,期望的目標應該是不一樣的,並且是越具體越好。
比如看上面的入門系列,可以抱著娛樂的心態在業餘時間看看。而看基礎系列,就要規劃好一段時間,邊看邊做筆記。
推薦一個金老師的學習方法給小夥伴們:多遍掃描法。
第一遍是略讀,把一本書從頭翻到尾,快速地閱讀,不深鑽細節,只看背景、結論和實際應用,即使遇到看不懂的地方也不要停下來,繼續看下去,這一遍的目的是讓你對這本書有一個總體上的印象。基於這個印象,你就能確定全書哪裡難,哪裡易,哪裡是重點,這樣就能制定下一步的攻讀策略。
第二遍則是“細讀”與“攻讀”,選擇你感興趣的,感覺最重要的內容慢慢地讀,可以採用一些行之有效的閱讀手段(比如記要點然後嘗試回顧、繪製思維導圖等)吸收書中的知識。對於難點,關鍵是弄明白為什麼你看不懂(數學公式看不懂?關鍵術語不明白?翻譯有問題?),你就能對症下藥了,比如本書寫得太抽象,可以先看看比較淺顯的科普類書籍,之後再回過頭來再看,或者找幾本不同作者寫的類似的教材對照著看……
上述過程可能需要重複幾次。並且可能前後兩次之間會間隔一個較長的時間。
人學習特定領域的知識需要一個過程,並且需要反覆的。
所以要耐心,學習是很少有可能畢其功於一役的。
歡迎關注這個會做動畫的程式設計師?