的確,正如偶像Bruce Eckel所說,」Life is short, you need Python」!html
若是你正在考慮學Java仍是Python的話,那就別想了,選Python吧,你的人生會有更多的時間作其餘有意思的事情。python
研究生以前我沒學python是有緣由的:首先,我怕蛇,很怕很怕,而這貨的logo居然就是蛇,我因故而避之;其次,我不喜歡腳本語言,我會shell,可是寫的時候不是很爽,只是在處理些文件操做或者字符串操做的時候纔會想起它,據說python腳本神馬的,我便又避之。git
可是,上了研究生髮現用Python的人不少,並且這貨簡直被神化了,無所不能,吊炸天的Edx的後臺居然就是用的Python,因而花了一個下午刷了本《Head First Python》,感受沒啥特別,只是寫起來輕便,甚至還能開發Android,讓我大吃一驚。後來,又接着看了些Python書,發現真的如此,不少時候用Java寫了幾十行的代碼用Python幾行就搞定了,並且它一樣擁有大量的第三方模塊,因而我就這麼走進了Python的世界。Python要入門很簡單,畢竟我搞Java這麼多年了,這倆太多的類似點了,入門以後寫寫數據結構,寫寫算法,熟悉一些高級特性,使用一些第三方模塊以後差很少就入門了,如今,作任何事情,我首先想到的是用Python如何實現?!嘿嘿,」Life is short, go start Python」!github
本人才疏學淺,學識大多淺嘗輒止,故文章如有錯誤,不管是文字筆誤仍是理解有錯,煩請您留言以告知,本人一定感激涕零!算法
Python分類下的系列文章,不斷更新中spring
1.Python基礎知識篇shell
Python Basics 和 Python Advances。前者是Python基礎的簡單總結,後者其實是羅列了些關於Python高級特性的好文章數據結構
2.Python數據結構篇ide
數據結構篇主要是閱讀Problem Solving with Python時寫下的閱讀記錄,固然,也結合了部分算法導論中的內容,此外還有很多wikipedia上的內容,因此內容比較多,可能有點雜亂。這部分主要是介紹瞭如何使用Python實現經常使用的一些數據結構,例如堆棧、隊列、二叉樹等等,也有Python內置的數據結構性能的分析,同時還包括了搜索和排序(在算法設計篇中會有更加詳細的介紹)的簡單總結。每篇文章都有實現代碼,內容比較多,簡單算法通常是大體介紹下思想及算法流程,複雜的算法會給出各類圖示和代碼實現詳細介紹。這一部分是下面算法設計篇的前篇,若是數據結構還不錯的能夠直接看算法設計篇,遇到問題能夠回來看數據結構篇中的某個具體內容充電一下,嘿嘿。函數
(1)搜索 簡述順序查找和二分查找,詳述Hash查找(hash函數的設計以及如何避免衝突)
(2)排序 簡述各類排序算法的思想以及它的圖示和實現
(3)數據結構 簡述Python內置數據結構的性能分析和實現經常使用的數據結構:棧、隊列和二叉堆
(4)樹總結 簡述二叉樹,詳述二叉搜索樹和AVL樹的思想和實現
3.Python算法設計篇
算法設計篇主要是閱讀Python Algorithms: Mastering Basic Algorithms in the Python Language[點擊連接可進入Springer下載原書電子版]以後寫下的讀書總結,原書大部份內容結合了經典書籍算法導論,內容更加細緻深刻,主要是介紹了各類經常使用的算法設計思想,以及如何使用Python高效巧妙地實現這些算法,這裏有別於前面的數據結構篇,部分算法例如排序就不會詳細介紹它的實現細節,而是側重於它內在的算法思想。這部分使用了一些與數據結構有關的第三方模塊,由於這篇的重點是算法的思想以及實現,因此並無去從新實現每一個數據結構,可是在介紹算法的同時會分析Python內置數據結構以及第三方數據結構模塊的優缺點,也就意味着該篇比前面都要難很多,可是我想個人介紹應該還算簡單明瞭,嘿嘿,除此以外,裏面還有不少關於python開發的內容,精彩不容錯過!
這裏每篇文章都有實現代碼,可是代碼我通常都不會分析,更多地是分析算法思想,因此內容都比較多,即使如此也沒有包括原書對應章節的全部內容,由於內容實在太豐富了,因此我只是選擇經典的算法實例來介紹算法核心思想,除此以外,還有很多內容是原書沒有的,部分是來自算法導論,部分是來自我本身的感悟,嘻嘻。該篇對於大神們來講是小菜,請一笑而過,對於菜鳥們來講可能有點難啃,因此最適合的是和我水平差很少的,對各個算法都有所瞭解可是理解還不算深入的半桶水的程序猿,嘿嘿。
本篇的順序按照原書Python Algorithms: Mastering Basic Algorithms in the Python Language的章節來安排的(章節標題部分相同部分不一樣喲),爲了節省時間以及保持原著的原滋原味,部份內容(通常是比較難以翻譯和理解的內容)直接摘自原著英文內容。
1.你也許以爲不少內容你都知道嘛,沒有看的必要,其實若是是個人話我也會這麼想,可是若是隻是概括一個算法有哪些步驟,那這個總結也就沒有意義了,我以爲這個總結的亮點在於想辦法說清楚一個算法是怎麼想出來的,有哪些須要注意的,如何進行優化的等等。
2.你也許還會說算法導論不是既權威又全面麼,基本上每一個算法都還有詳細的證實呢,讀算法導論豈不更好些,固然,你若是想讀算法導論我不攔着你,讀完了感受本身整我的都很差了別怪小弟沒有提醒你喲,嘻嘻嘻,左一個性質右一個定理實在不適合算法科普的啦,沒有幾我的可以堅持讀完的。
3.若是你細讀本系列的話我保證你會有很多收穫的,須要看算法導論哪一個部分的地方我會給出提示的,嘿嘿。舒適提示,精彩內容從第4節開始喲,麼麼噠 O(∩_∩)O~
(1)Python Algorithms - C1 Introduction 本節主要是對原書中的內容作些簡單介紹,說明算法的重要性以及各章節的內容概要。
(2)Python Algorithms - C2 The basics 本節主要介紹了三個內容:算法漸近運行時間的表示方法、六條算法性能評估的經驗以及Python中樹和圖的實現方式。
(3)Python Algorithms - C3 Counting 101 原書主要介紹了一些基礎數學,例如排列組合以及遞歸循環等,可是本節只重點介紹計算算法的運行時間的三種方法
(4)Python Algorithms - C4 Induction and Recursion and Reduction 本節主要介紹算法設計的三個核心知識:Induction(推導)、Recursion(遞歸)和Reduction(規約),這是原書的重點和難點部分
(5)Python Algorithms - C5 Traversal 本節主要介紹圖的遍歷算法BFS和DFS,以及對拓撲排序的另外一種解法和尋找圖的(強)連通份量的算法
(6)Python Algorithms - C6 Divide and Combine and Conquer 本節主要介紹分治法策略,提到了樹形問題的平衡性以及基於分治策略的排序算法
(7)Python Algorithms - C7 Greedy 本節主要經過幾個例子來介紹貪心策略,主要包括揹包問題、哈夫曼編碼和最小生成樹
(8)Python Algorithms - C8 Dynamic Programming 本節主要結合一些經典的動規問題介紹動態規劃的備忘錄法和迭代法這兩種實現方式,並對這兩種方式進行對比
(9)Python Algorithms - C9 Graphs 本節主要介紹圖算法中的各類最短路徑算法,從不一樣的角度揭示它們的內核以及它們的異同