時間複雜度

2021-10-22 23:19:30 字數 1036 閱讀 3986

如何判斷程式的複雜程度:時間和空間複雜度 

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...

時間複雜度 空間複雜度

演算法複雜度分為時間複雜度和空間複雜度。其作用 時間複雜度是指執行演算法所需要的計算工作量 而空間複雜度是指執行這個演算法所需要的記憶體空間。一 時間複雜度 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道...