資料結構與演算法(python) why?
我們舉⼀個可能不太恰當的例⼦:
如果將開發程式的過程⽐喻為作戰,我們碼農便是指揮作戰的將軍,⽽我們 所寫的**便是⼠兵和**。
那麼資料結構和演算法是什麼?答⽈:兵法!
我們可以不看兵法在戰場上⾁搏,如此,可能會勝利,可能會失敗。即使勝 利,可能也會付出巨⼤的代價。我們寫程式亦然:沒有看過資料結構和算 法,有時⾯對問題可能會沒有任何思路,不知如何下⼿去解決;⼤部分時間 可能解決了問題,可是對程式運⾏的效率和開銷沒有意識,效能低下;有時 會借助別⼈開發的利器暫時解決了問題,可是遇到效能瓶頸的時候,⼜不知 該如何進⾏針對性的優化。
如果我們常看兵法,便可做到胸有成⽵,有時會事半功倍!同樣,如果我們 常看資料結構與演算法,我們寫程式時也能游刃有餘、明察秋毫,遇到問題時 亦能⼊⽊三分、迎刃⽽解。
故,資料結構和演算法是⼀名程式開發⼈員的必備基本功,不是⼀朝⼀夕就能 練成絕世⾼⼿的。冰凍三尺⾮⼀⽇之寒,需要我們平時不斷的主動去學習積 累。
引⼊先來看⼀道題:
如果 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(0, 1001): for b in range(0, 1001): for c in range(0, 1001): if a**2 + b**2 == c**2 and a+b+c == 1000: print("a, b, c: %d, %d, %d" % (a, b, c))
end_time = time.time() print("elapsed: %f" % (end_time - start_time)) print("complete!")
運⾏結果:
a, b, c: 0, 500, 500 a, b, c: 200, 375, 425 a, b, c: 375, 200, 425 a, b, c: 500, 0, 500 elapsed: 214.583347 complete!
演算法的提出
演算法的概念
演算法是計算機處理資訊的本質,因為電腦程式本質上是⼀個演算法來告訴計 算機確切的步驟來執⾏⼀個指定的任務。⼀般地,當演算法在處理資訊時,會 從輸⼊裝置或資料的儲存位址讀取資料,把結果寫⼊輸出裝置或某個儲存地 址供以後再調⽤。
演算法是獨⽴存在的⼀種解決問題的⽅法和思想。
對於演算法⽽⾔,實現的語⾔並不重要,重要的是思想。
演算法可以有不同的語⾔描述實現版本(如c描述、c++描述、python描述 等),我們現在是在⽤python語⾔進⾏描述實現。
演算法的五⼤特性
輸⼊: 演算法具有0個或多個輸⼊ 2. 輸出: 演算法⾄少有1個或多個輸出 3. 有窮性: 演算法在有限的步驟之後會⾃動結束⽽不會⽆限迴圈,並且每⼀個 步驟可以在可接受的時間內完成 4. 確定性:演算法中的每⼀步都有確定的含義,不會出現⼆義性 5. 可⾏性:演算法的每⼀步都是可⾏的,也就是說每⼀步都能夠執⾏有限的 次數完成
第⼆次嘗試
import time
start_time = time.time()
# 注意是兩重迴圈 for a in range(0, 1001): for b in range(0, 1001-a): c = 1000 - a - b if a**2 + b**2 == c**2: print("a, b, c: %d, %d, %d" % (a, b, c))[/size][/font]
[font=微軟雅黑][size=3]end_time = time.time() print("elapsed: %f" % (end_time - start_time)) print("complete!")
運⾏結果:
a, b, c: 0, 500, 500 a, b, c: 200, 375, 425 a, b, c: 375, 200, 425 a, b, c: 500, 0, 500 elapsed: 0.182897 complete!
資料結構與演算法(1)
演算法 資料結構 一 演算法 1.演算法的幾個特徵是什麼。2.演算法複雜性的定義。大o 小o分別表示的含義。3.遞迴演算法的定義 遞迴演算法的兩要素。4.分治演算法的思想,經典的分治演算法 全排列 二分搜尋 歸併排序 快速排序 線性時間選擇 最接近點對問題 5.動態規劃演算法解題框架,動態規劃演算法...
資料結構與演算法(1)
1 線性表 2 棧 3 佇列 4 字串 補充 遞迴 1 樹與二叉樹 2 圖 1 查詢 2 排序 編寫相關演算法 資料結構 入門問題 1.為什麼學習資料結構?1 高階程式設計的理論指導 2 提公升編碼能力 3 面試中經常被問及,看發展潛力 2.有哪些資料結構?2.11線性結構 線性表 棧 佇列 陣列 ...
資料結構與演算法 1
cpu 處理器central process unit gpu 圖形處理器graphics processing unit,又稱顯示核心 視覺處理器 顯示晶元或繪圖晶元,是一種專門在個人電腦 工作站 遊戲機和一些移動裝置 如平板電腦 智慧型手機等 上執行繪圖運算工作的微處理器。其用途是將計算機系統所...