1. 程式人生 > >【3】資料結構與演算法---快速入門

【3】資料結構與演算法---快速入門

第 2 章 快速入門

2.1 入門案例

案例:如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 為自然數),求出所有a、b、c可能的組合?

解決方案:

1.猜三個,條件匹配

2.猜兩個,另一個計算

演算法五特性:

輸入、輸出、有窮性、確定性、可行性

​ 1、輸入: 演算法具有0個或多個輸入

​ 2、輸出: 演算法至少有1個或多個輸出

​ 3、有窮性: 演算法在有限的步驟之後會自動結束而不會無限迴圈,並且每一個步 驟可以在可接受的時間內完成 4、確定性:演算法中的每一步都有確定的含義,不會出現二義性 5、可行性:演算法的每一步都是可行的,也就是說每一步都能夠執行有限的次數完成

演算法評判標準:

基本環境+程式碼目標

伺服器環境是否一致/兩種程式碼是否在一臺機器上執行

兩種程式碼的目的一致

分析程式碼的方法:

	(1)前提:

		環境一致

		目標一致

	(2)思路:

		程式碼由內向外依次執行

	(3)內容:

		步驟數量

		單位執行時間

		關係:步驟數量*單位執行時間=程式碼執行時間(時間)

2.2 演算法複雜度

(1)時間複雜度

時間複雜度:做一件事情所需要花費的時間

規律趨勢 -----漸進時間複雜度 ——–表現形式大O技法 O(表示式主幹)

時間複雜度分類:

時間複雜度 說明
最優 夢想(最少)
最壞 最低保障******
平均 統計

時間複雜度基本計算規則:

​ 1.基本規則:一步到位 O(1)

​ 一步:在一個具體的數字步驟範圍中,肯定能完成這件事

​ 2.順序規則:一步一步O(n)

​ 一步:在一個不具體的數字步驟範圍中,肯定能完成這件事

​ 3.迴圈規則:

​ 簡單迴圈 乘積的關係 O(n**3)

​ 遞迴迴圈 O(logn)

​ 4.分支規則:最壞時間複雜度

​ 5.抓主幹:

​ 6.預設最壞時間複雜度:

(2)空間複雜度

空間複雜度:程式碼的執行所佔用的儲存空間

目的:用空間換取時間

(3)常見時間複雜度

常數最小,n越多,值越大,效率越低,時間越長

2.3 效能分析模型詳解

timeit模組使用方法

1.構造一個測試物件

​ 測試物件是一個單一功能的函式

2.對整個測試物件進行指定次數的測試

給一個的指定數值,返回一個總時間