第六課、算法效率的度量
阿新 • • 發佈:2017-05-03
分享 turn 結構 sin 效率 mage alt exit 額外
一、常見的時間復雜度
常見時間復雜度的比較
二、算法分析
定義一個數組
此算法最好的情況時執行一次
而最壞的情況卻要執行n次
註意:數據結構課程中,在沒有特殊說明時,所分析算法的時間復雜度都是指最壞時間復雜度
三、算法的空間復雜度(space complexity)
(1)、定義:S(n) = S(f(n))
n為算法的問題規模
f(n)為空間使用函數,與n相關
註:推導時間復雜度的方法同樣適應空間復雜度
如:當算法所需空間是常數時,空間復雜度為S(1)
(2)、空間復雜度計算練習
四、時間與空間算法策略
(1)、多數情況下,算法的時間復雜度令人關註
(2)、如果有必要,可以通過增加額外空間降低時間復雜度
(3)、同理,也可以通過增加算法的耗時降低空間復雜度
時間換空間的例子
/* 問題: 在一個由自然數1-1000中某些數字所組成的數組中,每個數字可能出現零次或者多次。 設計一個算法,找出出現次數最多的數字。 */ #include <iostream> using namespace std; void search(int a[], int len) //時間復雜度為 O(n) { int sp[1000] = {0}; int max = 0; for(int i=0; i<len; i++) { sp[a[i]- 1]++;//將對應數字的總數按順序存儲起來,如將1的個數存在sp[0]的位置,將2的個數存在sp[1]的位置 } for(int i=0; i<1000; i++) { if( max < sp[i] ) { max = sp[i]; } } for(int i=0; i<1000; i++) { if( max == sp[i] ) { cout << i + 1 << endl;//打印出數量最多的數(不一定只有一個) } } } int main(int argc, char* argv[]) { int a[] = {1, 1, 3, 4, 5, 6, 6, 6, 3, 3}; search(a, sizeof(a)/sizeof(*a)); return 0; }
五、小結
(1)、一般而言,工程中使用的算法,時間復雜度不超過O(n^3)
(2)、算法分析設計時,重點考慮最壞情況下的時間復雜度
(3)、數據結構課程中重點關心算法的時間復雜度
(4)、空間換時間是工程開發中常用的策略
第六課、算法效率的度量