有哪些用 Python 語言講演算法和數據結構的書?


1.Python數據結構篇

數據結構篇主要是閱讀[Problem Solving with Python](Welcome to Problem Solving with Algorithms and Data Structures) [該網址鏈接可能會比較慢]時寫下的閱讀記錄,當然,也結合了部分[演算法導論](Introduction to Algorithms)中的內容,此外還有不少wikipedia上的內容,所以內容比較多,可能有點雜亂。這部分主要是介紹了如何使用Python實現常用的一些數據結構,例如堆棧、隊列、二叉樹等等,也有Python內置的數據結構性能的分析,同時還包括了搜索和排序(在演算法設計篇中會有更加詳細的介紹)的簡單總結。每篇文章都有實現代碼,內容比較多,簡單演算法一般是大致介紹下思想及演算法流程,複雜的演算法會給出各種圖示和代碼實現詳細介紹。

**這一部分是下面演算法設計篇的前篇,如果數據結構還不錯的可以直接看演算法設計篇,遇到問題可以回來看數據結構篇中的某個具體內容充電一下,我個人認為直接讀演算法設計篇比較好,因為大家時間也都比較寶貴,如果你會來讀這些文章說明你肯定有一定基礎了,後面的演算法設計篇中更多的是思想,這裡更多的是代碼而已,嘿嘿。**

(1)[搜索](Python Data Structures)

簡述順序查找和二分查找,詳述Hash查找(hash函數的設計以及如何避免衝突)

(2)[排序](Python Data Structures)

簡述各種排序演算法的思想以及它的圖示和實現

(3)[數據結構](Python Data Structures)

簡述Python內置數據結構的性能分析和實現常用的數據結構:棧、隊列和二叉堆

(4)[樹總結](Python Data Structures)

簡述二叉樹,詳述二叉搜索樹和AVL樹的思想和實現

2.Python演算法設計篇

演算法設計篇主要是閱讀[Python Algorithms: Mastering Basic Algorithms in the Python Language](Python Algorithms: Mastering Basic Algorithms in the Python Language)[**點擊鏈接可進入Springer免費下載原書電子版**]之後寫下的讀書總結,原書大部分內容結合了經典書籍[演算法導論](Introduction to Algorithms),內容更加細緻深入,主要是介紹了各種常用的演算法設計思想,以及如何使用Python高效巧妙地實現這些演算法,這裡有別於前面的數據結構篇,部分演算法例如排序就不會詳細介紹它的實現細節,而是側重於它內在的演算法思想。這部分使用了一些與數據結構有關的第三方模塊,因為這篇的重點是演算法的思想以及實現,所以並沒有去重新實現每個數據結構,但是在介紹演算法的同時會分析Python內置數據結構以及第三方數據結構模塊的優缺點,也就意味著該篇比前面都要難不少,但是我想我的介紹應該還算簡單明了,因為我用的都是比較樸實的語言,並沒有像演算法導論一樣列出一堆性質和定理,主要是對著某個問題一步步思考然後演算法就出來了,嘿嘿,除此之外,裡面還有很多關於python開發的內容,精彩真的不容錯過!

這裡每篇文章都有實現代碼,但是代碼我一般都不會分析,更多地是分析演算法思想,所以內容都比較多,即便如此也沒有包括原書對應章節的所有內容,因為內容實在太豐富了,所以我只是選擇經典的演算法實例來介紹演算法核心思想,除此之外,還有不少內容是原書沒有的,部分是來自演算法導論,部分是來自我自己的感悟,嘻嘻。該篇對於大神們來說是小菜,請一笑而過,對於菜鳥們來說可能有點難啃,所以最適合的是和我水平差不多的,對各個演算法都有所了解但是理解還不算深刻的半桶水的程序猿,嘿嘿。

本篇的順序按照原書[Python Algorithms: Mastering Basic Algorithms in the Python Language](Python Algorithms: Mastering Basic Algorithms in the Python Language)的章節來安排的(章節標題部分相同部分不同喲),為了節省時間以及保持原著的原滋原味,部分內容(一般是比較難以翻譯和理解的內容)直接摘自原著英文內容。

**1.你也許覺得很多內容你都知道嘛,沒有看的必要,其實如果是我的話我也會這麼想,但是如果只是歸納一個演算法有哪些步驟,那這個總結也就沒有意義了,我覺得這個總結的亮點在於想辦法說清楚一個演算法是怎麼想出來的,有哪些需要注意的,如何進行優化的等等,採用問答式的方式讓讀者和我一起來想出某個問題的解,每篇文章之後都還有一兩道小題練手喲**

**2.你也許還會說演算法導論不是既權威又全面么,基本上每個演算法都還有詳細的證明呢,讀演算法導論豈不更好些,當然,你如果想讀演算法導論的話我不攔著你,讀完了感覺自己整個人都不好了別怪小弟沒有提醒你喲,嘻嘻嘻,左一個性質右一個定理實在不適合演算法科普的啦,沒有多少人能夠堅持讀完的。但是碼農與蛇的故事內容不多喲,呵呵呵**

**3.如果你細讀本系列的話我保證你會有不少收穫的,需要看演算法導論哪個部分的地方我會給出提示的,嘿嘿。溫馨提示,前面三節內容都是介紹基礎知識,所以精彩內容從第4節開始喲,么么噠 O(∩_∩)O~**

(1)[Python Algorithms - C1 Introduction](Python Algorithms)

本節主要是對原書中的內容做些簡單介紹,說明演算法的重要性以及各章節的內容概要。

(2)[Python Algorithms - C2 The basics](Python Algorithms)

**本節主要介紹了三個內容:演算法漸近運行時間的表示方法、六條演算法性能評估的經驗以及Python中樹和圖的實現方式。**

(3)[Python Algorithms - C3 Counting 101](Python Algorithms)

原書主要介紹了一些基礎數學,例如排列組合以及遞歸循環等,但是本節只重點介紹計算演算法的運行時間的三種方法

(4)[Python Algorithms - C4 Induction and Recursion and Reduction](Python Algorithms)

**本節主要介紹演算法設計的三個核心知識:Induction(推導)、Recursion(遞歸)和Reduction(規約),這是原書的重點和難點部分**

(5)[Python Algorithms - C5 Traversal](Python Algorithms)

**本節主要介紹圖的遍歷演算法BFS和DFS,以及對拓撲排序的另一種解法和尋找圖的(強)連通分量的演算法**

(6)[Python Algorithms - C6 Divide and Combine and Conquer](Python Algorithms)

**本節主要介紹分治法策略,提到了樹形問題的平衡性以及基於分治策略的排序演算法**

(7)[Python Algorithms - C7 Greedy](Python Algorithms)

**本節主要通過幾個例子來介紹貪心策略,主要包括背包問題、哈夫曼編碼和最小生成樹等等**

(8)[Python Algorithms - C8 Dynamic Programming](Python Algorithms)

**本節主要結合一些經典的動規問題介紹動態規劃的備忘錄法和迭代法這兩種實現方式,並對這兩種方式進行對比**

(9)[Python Algorithms - C9 Graphs](Python Algorithms)

**本節主要介紹圖演算法中的各種最短路徑演算法,從不同的角度揭示它們的內核以及它們的異同**

**下面的二維碼是我個人維護的微信公眾號「瀟澗技術專欄」,會不定期分享移動開發的核心技術,歡迎關注!**

http://weixin.qq.com/r/snUsNEzEfhEBrQhX9yCg (二維碼自動識別)


可視化的數據結構和演算法

http://coolshell.cn/articles/4671.html


有一本Data Structures and Algorithms with Object Oriented Design Patterns in Python,作者Bruno R. Preiss

http://www.brpreiss.com/


  • Annotated Algorithms in Python: With Applications in Physics, Biology, and Finance - python在演算法領域的實際應用

  • Python Algorithms 2014: Mastering Basic Algorithms in the Python Language

  • Data Structure and Algorithmic Thinking with Python: Data Structure and Algorithmic Puzzles


《Data Structures and Algorithms in Python(http://multimedia.ucc.ie/Public/training/cycle1/algorithms-in-python.pdf)

這本書講了python數據結構底層的實現原理及很多高效使用的建議。


北大地空數算課就是用phython,老師還組織翻譯了課本,百度上就可以查到,也可以下載pdf

附鏈接

http://gis4g.pku.edu.cn/course/pythonds/


Python 數據結構與演算法問題求解


《Problem Solving with Algorithms and Data Structures using Python》在quora上被很多人推薦的一本書,適合入門。這裡有電子版的中文目錄和英文版。使用Python解決演算法與數據結構問題 · GitBook


Problem Solving with Algorithms and Data Structures using Python

作者: Brad Miller and David Ranum

參考: BBTShare.org


Goodrich Tamassia系列之:

Data Structures and Algorithms in Python.

之前最熱銷的Java版出了好幾版,現在開闢Python版了。


Python Algorithms 挺不錯的


翻譯了下 Problem-solving-with-algorithms-and-data-structure-using-python 中文版見 : 知乎專欄


《數據結構與演算法:Python語言描述》 裘宗燕著,機械工業出版社

今年年初剛出的

不謝



有一本新書《數據結構 Python語言描述》。或許可以看看。


伯克利的sicp with Python


中:

Python演算法教程 (豆瓣)

英:

Python Algorithms (豆瓣)


program solving with algorithms挺不錯的.


演算法圖解!

演算法圖解!

演算法圖解!

有趣,易懂


這個也可以 Think Complexity


最近看到一本中譯本《python演算法教程》,不知道好不好,翻譯質量如何?


演算法導論3ed


推薦閱讀:

計算機演算法領域有哪些書籍像《演算法導論》一樣經典?
md5會有重複的可能嗎?
平滑的戰爭迷霧效果是如何實現的?
為什麼說平均情況下,插入排序比選擇排序快?
PageRank 演算法的複雜程度怎麼樣?

TAG:Python | 演算法 | 數據結構 |