強烈推薦一本免費演算法書《用Python解決資料結構與演算法問題》
學 Python 僅僅只學 Python 語法和 API 是遠遠不夠的,掌握演算法和資料結構這種永遠都不會過時的核心技能才是決定一個程式設計師職業發展的關鍵因素。演算法和資料結構對專業程式設計師來說重要性不言而喻,同樣一個問題,不同演算法效率可謂千差萬別。在問題規模很小的時候你可能感知不到,但是一旦資料上升到TB級別時,兩者的差距就像西瓜和芝麻的差別了。
舉個簡單例子:我們要計算前n個整數之和,你最先想到的演算法可能是迭代:
def sumOfN(n): theSum = 0 for i in range(1,n+1): theSum = theSum+ i return theSum print(sumOfN(10))
程式碼非常直觀,初學者都能讀懂,就是從1累加到n,得到最後的結果。這種演算法的效率隨著n的增加而變化,時間複雜度是O(n),線性時間,大O表示法指出了最糟糕情況下的執行時間。想象一下,這個數足夠大的時候,所耗費的時間將是無法估量的,當然,還有很多比線性時間更糟糕的演算法。
當然,最後還有一種最理想的演算法,就是常數級別的,O(1) 常數級複雜度。也就是說程式執行的時間與需要處理的資料大小無關。
如果利用數學方程而不是迭代來計算前n個整數的和,他的複雜度就是 O(1)
def sumOfN3(n): return(n*(n+1))/2 print(sumOfN3(10))
Google這樣大資料公司,資料都是以TB為單位的資料量,索引的網頁數量超過1萬億的情況下,沒有牛逼的演算法,難以撐起一個巨無霸公司。很多人覺得學演算法沒什麼用,因為工作上就是調API,寫寫業務邏輯,學這些幹什麼?如果這麼想,那你永遠都是在寫業務邏輯程式碼,寫到35歲轉行。
現在學演算法還來得及嗎?除了生孩子,做任何事情都不會被年齡限制。推薦這本《problem-solving-with-algorithms-and-data-structure-usingpython》,感謝作者和譯者的付出。
線上閱讀地址: https://facert.gitbooks.io/python-data-structure-cn/2.%E7%AE%97%E6%B3%95%E5%88%86%E6%9E%90/2.2.%E4%BB%80%E4%B9%88%E6%98%AF%E7%AE%97%E6%B3%95%E5%88%86%E6%9E%90/
PDF 下載地址:公眾號回覆“演算法”
關注公眾號「Python之禪」(id:vttalk)獲取最新文章