如何判斷程式的複雜程度:時間和空間複雜度
1. 時間複雜度:
使用大o表示法來表示程式的時間複雜度
常見的7種時間複雜度(複雜度由低到高排序)
o(1):常數時間複雜度 o(log(n):
對數時間複雜度
o(1):常數複雜度
int n = 1;
system.out.println(n);
o(n): 線性時間複雜度
for (int j = 0; j < n; j++)
o(n^2):平方時間複雜度
for (int i = 0; i < n; i++)
}o(n^3):立方時間複雜度
for (int i = 0; i < n; i++) }}
o(k^n):指數時間複雜度,k表示常數
/*** 遞迴求斐波那契數列的第n項;可以通過畫執行樹的方式獲得時間複雜度
*/int fib(int n)
o(n!):階乘時間複雜度
常用演算法中的應用
演算法遞迴關係式
運算時間
二分搜尋演算法
二叉樹遍歷
最佳排序矩陣搜尋(已排好序的二維矩陣)
合併排序
所有排序的最優演算法都是o(nlog(n))
2. 空間複雜度
如何判斷一段**的空間複雜度
主要通過兩部分進行判斷:
陣列的長度 如果**中應用了陣列,那麼陣列的長度,基本上就是空間複雜度; e:一維陣列的空間複雜度是o(n);二維陣列的空間複雜度是o(n^2) 遞迴的深度 如果**中有遞迴,那麼遞迴的深度,就是**的空間複雜度的最大值
ps:如果**中既有陣列,又有遞迴,那麼兩者的最大值就是**的空間複雜度
leecode有個爬樓梯的複雜度分析情況;可以進行練習
3. 陣列和鍊錶的時間複雜度分析
陣列 隨機增加:o(n) 隨機查詢:o(1) 隨機刪除:o(n)
隨機增加:o(1)
隨機查詢:o(n)
隨機刪除:o(1)
dfs時間複雜度 時間複雜度 空間複雜度
時間複雜度的數學證明方法相對比較複雜,通常在工程實際中,會分析就好。注意 只看最高複雜度的運算 int for for for for int遞迴如何分析時間複雜度?常數係數可以忽略,在分析時不用考慮,只要說以上術語即可。主定理 master throrem 上述第四種是歸併排序,所有排序演算法,最...
時間複雜度 空間複雜度
時間複雜度 在電腦科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串 的長度的函式。時間複雜度常用大o符號 表述,不包括這個函式的低階項和首項係數。計算時間複雜度的方法 1 只保留高階項,低階項直接丟棄 2 係數不要 3 執行次數是常數是為o 1...
時間複雜度 空間複雜度
演算法複雜度分為時間複雜度和空間複雜度。其作用 時間複雜度是指執行演算法所需要的計算工作量 而空間複雜度是指執行這個演算法所需要的記憶體空間。一 時間複雜度 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道...