【3】資料結構與演算法---快速入門
阿新 • • 發佈:2018-12-16
第 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.對整個測試物件進行指定次數的測試
給一個的指定數值,返回一個總時間