演算法複雜度

2021-10-03 00:02:29 字數 2092 閱讀 3333

關於演算法複雜度:

演算法複雜度是我們來衡量乙個演算法效率的標準,主要分為時間複雜度和空間複雜度。時間複雜度就是指演算法**在執行最終得到我們想要的結果時所消耗的時間,而空間複雜度則是指演算法中用來儲存的資料結構所占用的空間。

大o複雜度表示法:

大o複雜度表示法描述演算法的效能和複雜程度。舉例如下:

function

total

(n)return sum;

// t

}

若執行每一行的時間都為 t,for 迴圈相當於執行了 n 次,所以這一段**總執行時間為 (t+nt+nt+t) = (2n+2)t。

function

total

(n)}

return sum;

//t

在第乙個 for 迴圈執行 n 次的同時,第二個 for 迴圈執行了 n*n 次,這段**總執行時間為(t+nt+n*n*t*2+t)=(2n*n+n+2)t。

上邊兩個函式的執行時間可以標記為 t(n) = o(2n+2) 和 t(n) = o(2n*n+n+2)。這就是大 o 時間複雜度表示法,它不代表**真正的執行時間,而是表示**隨資料規模增長的變化趨勢,簡稱時間複雜度。

當 n 很大時,我們可以忽略常數項,只保留乙個最大量級即可。所以上邊的**執行時間可以簡單標記為 t(n) = o(n) 和 t(n) = o(n2)。

時間複雜度分析

時間複雜度的取值

for

(var i =

0; i < n; i++

)

在分析的時候,只需要關心哪個**塊迴圈次數最多的那段**,比如說剛才的第乙個例子,迴圈最多的**塊是這兩行,迴圈都是n次。

最大值原則:總複雜度等於最大的**塊的複雜度

function

total

(n)}

// 第二個 for 迴圈

var sum2 =0;

for(

var i=

0;i<

1000

;i++

)// 第三個 for 迴圈

var sum3 =0;

for(

var i =

0; i < n; i++

)return

}

分別分析每一段迴圈時間複雜度,取他們最大的量級決定整段**複雜度。

第一段,時間複雜度 o(n^2)。

第二段,時間複雜度可以忽略,迴圈執行了 1000 次,是個常數量級,儘管對**的執行時間會有影響,但是當 n 無限大的時候,就可以忽略。

第三段,時間複雜度o(n)。

綜上所述,所以上述**的時間複雜度為 o(n^2)。

乘法原則:巢狀**複雜度等於巢狀內外**複雜度乘積

function

f(i)

return sum;

}function

total

(n)}

total方法時間複雜度o(n),f方法的時間複雜度o(n)。所以整段**的時間複雜度o(n2)。

常見的時間複雜度分析

對應的增長率如下圖所示

時間複雜度可以分為兩類,多項式量級和非多項式量級。其中,非多項式量級只有兩個:o(2n) 和 o(n!),當資料規模 n 增長時,非多項式量級的執行時間就會急劇增加,所以,非多項式量級的**演算法是非常低效的演算法。

空間複雜度分析

空間複雜度的話和時間複雜度類似推算。 所謂空間複雜度就是表示演算法的儲存空間和資料規模之間的關係。

時間複雜度的推算,忽略掉常數量級,每次陣列賦值都會申請乙個空間儲存變數。

function

initarr

(n)}

此函式的空間複雜度為 o(n)。

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

1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...

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

演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...

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

演算法的時間複雜度是指執行演算法所需要的計算工作量。n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 存在乙個正...