資料結構與演算法(Python)
阿新 • • 發佈:2018-12-10
資料結構和演算法(一)
最近下班一直在學習和總結Python,最近在整理資料結構和演算法這方面的知識,雖然大學的時候也學過資料結構(c語言版本), 但是工作這幾年一直在做前端所以,這方面的知識也忘了差不多,所以就想整理一下,方便以後自己複習。
首先說一下演算法的幾個概念,大O表示法,它主要是用來表示演算法效率的一個衡量方法,也叫時間複雜度的表示方法。
我們先看一道題 “如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 為自然數),如何求出所有a、b、c可能的組合?”
相信大家再看到這個題的時候一定有自己的思路,下面是第一種方法。
import time start_time = time.time() for a in range(1001): for b in range(1001): for c in range(1001): if a + b + c == 1000 and a**2 + b**2 == c**2: print("a, b, c : %d, %d, %d"%(a, b, c)) end_time = time.time() print("time: %d"%(end_time - start_time)) print("finished")
我們列印一下結果看計算出這個答案需要的時間。一共是 208秒
a, b, c : 0, 500, 500
a, b, c : 200, 375, 425
a, b, c : 375, 200, 425
a, b, c : 500, 0, 500
time: 208
finished
演算法的概念是:演算法是計算機處理資訊的本質,因為計算機程式本質上是一個演算法來告訴計算機確切的步驟來執行一個任務。簡單來說演算法是告訴計算機第一步幹什麼。第二步幹什麼....,然後就任務完成OK,演算法是獨立存在的一種解決問題的方法和思想。 比如說上面這個問題,在JavaScript語言裡面實現的語法就不一樣了,但是解決這個問題的思路是一樣的。 對於演算法而言,實現的語言並不重要,重要的是思想。 演算法的五大特性:(瞭解) 1、輸入:演算法具有0個或者多個輸入。 2、輸出:演算法至少有1個或者多個輸出。(演算法就是結果問題,解決問題後總要有個結果吧) 3、又窮性:演算法在有限的步驟之後會自動結束而不會無限迴圈。 4、確定性:演算法中的每一步都有確定的含義,不會出現二義性, 5、可行性:演算法的每一步都是可行的。