的確,正如偶像Bruce Eckel所說,“Life is short, you need Python”! 如果你正在考慮學Java還是Python的話,那就別想了,選Python吧,你的人生會有更多的時間做其他有意思的事情。 工作之前我沒學python是有原因的:首先,我怕蛇,很怕很怕,而這貨的logo竟然就是蛇,我因故而避之;其次,我不喜歡腳本語言,我會shell,但是寫的時候不是很爽,只是在處理些文件操作或者字符串操作的時候才會想起它,聽說python腳本神馬的,我便又避之。
但是,工作了之后發(fā)現(xiàn)用Python的人很多,而且這貨簡直被神化了,無所不能,吊炸天的Edx的后臺竟然就是用的Python,于是花了一個下午刷了本《Head First Python》,感覺沒啥特別,只是寫起來輕便,甚至還能開發(fā)Android,讓我大吃一驚。后來,又接著看了些Python書,發(fā)現(xiàn)真的如此,很多時候用Java寫了幾十行的代碼用Python幾行就搞定了,而且它同樣擁有大量的第三方模塊,于是我就這么走進了Python的世界。Python要入門很簡單,畢竟我搞Java這么多年了,這倆太多的相似點了,看完書之后寫寫數(shù)據(jù)結(jié)構(gòu),寫寫算法,熟悉一些高級特性,使用一些第三方模塊之后應(yīng)該就算入門了吧?,F(xiàn)在,做任何事情,我首先想到的是用Python如何實現(xiàn)?!嘿嘿,“Life is short, go start Python”!
1. Python基礎(chǔ)知識篇
Python Basics 和 Python Advances 前者是Python基礎(chǔ)的簡單總結(jié)(大部分摘自網(wǎng)上恩師@廖雪峰老師的Python教程),后者推薦了些關(guān)于Python高級特性的好文章(大部分摘自伯樂在線Python分類的文章)
2. Python數(shù)據(jù)結(jié)構(gòu)篇
數(shù)據(jù)結(jié)構(gòu)篇主要是閱讀Problem Solving with Python [該網(wǎng)址鏈接可能會比較慢]時寫下的閱讀記錄,當然,也結(jié)合了部分算法導論中的內(nèi)容,此外還有不少wikipedia上的內(nèi)容,所以內(nèi)容比較多,可能有點雜亂。這部分主要是介紹了如何使用Python實現(xiàn)常用的一些數(shù)據(jù)結(jié)構(gòu),例如堆棧、隊列、二叉樹等等,也有Python內(nèi)置的數(shù)據(jù)結(jié)構(gòu)性能的分析,同時還包括了搜索和排序(在算法設(shè)計篇中會有更加詳細的介紹)的簡單總結(jié)。每篇文章都有實現(xiàn)代碼,內(nèi)容比較多,簡單算法一般是大致介紹下思想及算法流程,復雜的算法會給出各種圖示和代碼實現(xiàn)詳細介紹。
這一部分是下面算法設(shè)計篇的前篇,如果數(shù)據(jù)結(jié)構(gòu)還不錯的可以直接看算法設(shè)計篇,遇到問題可以回來看數(shù)據(jù)結(jié)構(gòu)篇中的某個具體內(nèi)容充電一下,我個人認為直接讀算法設(shè)計篇比較好,因為大家時間也都比較寶貴,如果你會來讀這些文章說明你肯定有一定基礎(chǔ)了,后面的算法設(shè)計篇中更多的是思想,這里更多的是代碼而已,嘿嘿。
(1)搜索
簡述順序查找和二分查找,詳述Hash查找(hash函數(shù)的設(shè)計以及如何避免沖突)
(2)排序
簡述各種排序算法的思想以及它的圖示和實現(xiàn)
(3)數(shù)據(jù)結(jié)構(gòu)
簡述Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)的性能分析和實現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu):棧、隊列和二叉堆
(4)樹總結(jié)
簡述二叉樹,詳述二叉搜索樹和AVL樹的思想和實現(xiàn)
3. Python算法設(shè)計篇
算法設(shè)計篇主要是閱讀Python Algorithms: Mastering Basic Algorithms in the Python Language[點擊下載]之后寫下的讀書總結(jié),原書大部分內(nèi)容結(jié)合了經(jīng)典書籍算法導論,內(nèi)容更加細致深入,主要是介紹了各種常用的算法設(shè)計思想,以及如何使用Python高效巧妙地實現(xiàn)這些算法,這里有別于前面的數(shù)據(jù)結(jié)構(gòu)篇,部分算法例如排序就不會詳細介紹它的實現(xiàn)細節(jié),而是側(cè)重于它內(nèi)在的算法思想。這部分使用了一些與數(shù)據(jù)結(jié)構(gòu)有關(guān)的第三方模塊,因為這篇的重點是算法的思想以及實現(xiàn),所以并沒有去重新實現(xiàn)每個數(shù)據(jù)結(jié)構(gòu),但是在介紹算法的同時會分析Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)以及第三方數(shù)據(jù)結(jié)構(gòu)模塊的優(yōu)缺點,也就意味著該篇比前面都要難不少,但是我想我的介紹應(yīng)該還算簡單明了,因為我用的都是比較樸實的語言,并沒有像算法導論一樣列出一堆性質(zhì)和定理,主要是對著某個問題一步步思考然后算法就出來了,嘿嘿,除此之外,里面還有很多關(guān)于python開發(fā)的內(nèi)容,精彩真的不容錯過!
這里每篇文章都有實現(xiàn)代碼,但是代碼我一般都不會分析,更多地是分析算法思想,所以內(nèi)容都比較多,即便如此也沒有包括原書對應(yīng)章節(jié)的所有內(nèi)容,因為內(nèi)容實在太豐富了,所以我只是選擇經(jīng)典的算法實例來介紹算法核心思想,除此之外,還有不少內(nèi)容是原書沒有的,部分是來自算法導論,部分是來自我自己的感悟,嘻嘻。該篇對于大神們來說是小菜,請一笑而過,對于菜鳥們來說可能有點難啃,所以最適合的是和我水平差不多的,對各個算法都有所了解但是理解還不算深刻的半桶水的程序猿,嘿嘿。
本篇的順序按照原書Python Algorithms: Mastering Basic Algorithms in the Python Language的章節(jié)來安排的(章節(jié)標題部分相同部分不同喲),為了節(jié)省時間以及保持原著的原滋原味,部分內(nèi)容(一般是比較難以翻譯和理解的內(nèi)容)直接摘自原著英文內(nèi)容。
(1)Python Algorithms - C1 Introduction
本節(jié)主要是對原書中的內(nèi)容做些簡單介紹,說明算法的重要性以及各章節(jié)的內(nèi)容概要。
(2)Python Algorithms - C2 The basics
本節(jié)主要介紹了三個內(nèi)容:算法漸近運行時間的表示方法、六條算法性能評估的經(jīng)驗以及Python中樹和圖的實現(xiàn)方式。
(3)Python Algorithms - C3 Counting 101
原書主要介紹了一些基礎(chǔ)數(shù)學,例如排列組合以及遞歸循環(huán)等,但是本節(jié)只重點介紹計算算法的運行時間的三種方法
(4)Python Algorithms - C4 Induction and Recursion and Reduction
本節(jié)主要介紹算法設(shè)計的三個核心知識:Induction(推導)、Recursion(遞歸)和Reduction(規(guī)約),這是原書的重點和難點部分
(5)Python Algorithms - C5 Traversal
本節(jié)主要介紹圖的遍歷算法BFS和DFS,以及對拓撲排序的另一種解法和尋找圖的(強)連通分量的算法
(6)Python Algorithms - C6 Divide and Combine and Conquer
本節(jié)主要介紹分治法策略,提到了樹形問題的平衡性以及基于分治策略的排序算法
(7)Python Algorithms - C7 Greedy
本節(jié)主要通過幾個例子來介紹貪心策略,主要包括背包問題、哈夫曼編碼和最小生成樹等等
(8)Python Algorithms - C8 Dynamic Programming
本節(jié)主要結(jié)合一些經(jīng)典的動規(guī)問題介紹動態(tài)規(guī)劃的備忘錄法和迭代法這兩種實現(xiàn)方式,并對這兩種方式進行對比
(9)Python Algorithms - C9 Graphs
本節(jié)主要介紹圖算法中的各種最短路徑算法,從不同的角度揭示它們的內(nèi)核以及它們的異同