演算法的時間複雜度

2021-07-03 19:47:41 字數 1086 閱讀 9746

進行演算法分析時,語句總的執行次數t(n)是關於關於問題規模n的函式,進而分析t(n)隨n的變化情況,並確定t(n)的數量級。

演算法的時間複雜度,也叫做演算法的時間度量,記作,t(n)=o(f(n)), 它表示,演算法執行時間的增長率和f(n的增長率相同,稱為演算法的漸進時間複雜度,簡稱為時間複雜度。其中f(n)是問題規模n的某個函式。

由於執行演算法時,每次的輸入都不一樣,所以時間複雜度又有最好時間複雜度,最壞時間複雜度和平均時間複雜度,最好和最壞情況都比較好分析,平均時間複雜度稍微麻煩一點。一般在沒有特別說明的情況下,我們所說的時間複雜度都是最壞時間複雜度。

1) 常數階

int n = 100;

intsum = n*(n+1)/2;

無論n等於多少,這條語句只執行一次,複雜度是o(1).

2) 線性階

for(int i=0; i

< n; i++)

單迴圈,對於乙個n,迴圈體執行n次,所以複雜度是o(n).

3) 對數階

int i=1;

while( i

< n)

對於乙個n, 假設迴圈體執行的次數為x, 則有2x=n, 所以x=log2n, 這個演算法的複雜度就是o(log2n).

這個最典型的就是查詢演算法中的二分查詢了。

4) 平方階

for(int i=0;i}
對於這個迴圈,執行的次數是 n+(n-1)+(n-2)+…+(n-m+1), 即(m-1)(2n-m+1)/2, 因為m, n都是常數,所以根據上面提到的推導方法,可以認為m=n,所以這個迴圈執行的次數可以近似看作(n-1)(n+1)/2 = 1/2n2 – 1/2,所以演算法複雜度是n2.

o(1) < o(logn) < o(n) < o(nlogn) < o(n2) < o(n3) < o(2n) < o(n!)<o(nn<)

——參考 欒大成《大話資料結構》第1版

演算法時間複雜度空間複雜度

演算法 是解決某一類問題的通法,即一系列清晰無歧義的計算指令。每個演算法只能解決具有特定特徵的一類問題,但乙個問題可由多個演算法解決。乙個演算法應該有以下五個方面的特性 比較演算法的優劣我們從兩個維度去進行考量 時間 空間 時間複雜度,空間複雜度 找出基本語句 演算法中執行次數最多的那條語句就是基本...

演算法 時間複雜度 空間複雜度

1 if i 1 2 a 1 result 3 4 result n 2 result 1000 1000 3 array.push a array.pop 4 map.set 1,1 map.get 1,1 在計算複雜度的時候,o 1 一般會被忽略。1 for let i 0 i n i 2 wh...

演算法的時間複雜度 空間複雜度

時間複雜度和空間複雜度是度量演算法效率的常用指標 事後統計,不常用 事前統計影響因素 演算法策略 問題規模 程式語言 質量 機器執行指令的速度 撇開軟硬體的影響,演算法執行工作量的大小只依賴於問題的規模 通常用整數n表示 乙個演算法是由控制結構 順序,分支,迴圈三種 和原操作 指固有資料型別的操作 ...