資料結構筆記(演算法時間複雜度計算)

2021-09-25 09:10:46 字數 1941 閱讀 6434

時間複雜度

乙個語句的頻度是指該語句在演算法中被重複執行的次數。演算法中所有語句的頻度之和記作 t(n) ,它是演算法的問題規模 n 的函式,時間複雜度主要分析 t(n) 的數量級。演算法中基本運算(最深層迴圈內的語句)的頻度與 t(n) 同數量級,因此通常採用演算法中基本運算的頻度 f(n) 來分析演算法的時間複雜度。因此,演算法的時間複雜度可以記為:

t (n

)=o(

f(n)

)t(n) = o(f(n))

t(n)=o

(f(n

))o 的含義是 t(n) 的數量級,其數學定義是:t(n) 和 f(n) 是定義在正整數集合上的兩個函式,則存在正常數c和 n0 ,使得當n >= n0 時,都滿足 0<=t(n)<=cf(n)

結合以上描述,從數學意義上講,t(n) 是函式 f(n) 的下界。

對於如下程式段:

int a = n;

while (a>0)

return n;

當 n 的值大於0的時候,基本運算 「a–」 會執行 n 次,直到 n = 0 ;這時a–執行的頻度 f(n) = n ;

當 n 的值小於或等於 0 的時候,基本運算 「a–」 會執行 0 次,這時 a-- 執行的頻度為 f(n) = 0;

可以看到,程式基本運算的執行次數,除了和程式本身有關外,還和輸入的 n 的值有關係

所以,乙個程式在執行的時候,根據基本運算被執行的次數,可以將複雜度分為最壞的時間複雜度,平均的時間複雜度,最好的時間複雜度。

在分析乙個程式的執行效率的時候,一般都是考慮最壞情況下的時間複雜度。還是以上面的程式段作為例子,那麼該程式段的時間複雜度為 t(n) = n ;

加法規則:

t (n

)=t1

n+t2

(n)=

o(f(

n))+

o(g(

n))=

o(ma

x(f(

n),g

(n))

t(n) = t_1n+t_2(n)=o(f(n))+o(g(n))=o(max(f(n),g(n))

t(n)=t

1​n+

t2​(

n)=o

(f(n

))+o

(g(n

))=o

(max

(f(n

),g(

n))乘法規則:

t (n

)=t1

(n)∗

t2(n

)=o(

f(n)

∗o(g

(n))

=o(f

(n)∗

g(n)

)t(n) = t_1(n)*t_2(n)=o(f(n)*o(g(n))=o(f(n)*g(n))

t(n)=t

1​(n

)∗t2

​(n)

=o(f

(n)∗

o(g(

n))=

o(f(

n)∗g

(n))

常見的漸進時間複雜度比較:

o (1

)

log2

n)

n)

nlog

2n

)

n2

)

n3

)

n3

)

2n

)

n!

)

nn

)o(1)o(

1)log2

​n)n)

nlog

2​n)

n2)n3

)n3)2n

)n!)nn

)

資料結構時間複雜度計算

1 for迴圈 一次for迴圈的執行時間至多是該for迴圈內語句的執行時間乘以迭代次數。2 巢狀的for迴圈 肯定是計算最內層迴圈語句的執行次數,然後再乘以所以迴圈的迭代次數。3 整個程式 其實找到迴圈迭代次數最多,巢狀最多的進行計算就好。3 當然,我們計算的只是大概值,而且為了計算的簡便,我們一邊...

資料結構 時間複雜度計算

1.演算法的特性 輸入 input 乙個演算法有0個或多個輸入,以刻畫運算物件的初始情況,所謂0個輸入是指演算法本身定出了初始條件 輸出 output 乙個演算法有乙個或多個輸出,以反映對輸入資料加工後的結果。沒有輸出的演算法是毫無意義的。可以在控制台列印輸出或者返回乙個或多個值等。確定性 defi...

資料結構 時間複雜度計算

1.演算法的特性 輸入 input 乙個演算法有0個或多個輸入,以刻畫運算物件的初始情況,所謂0個輸入是指演算法本身定出了初始條件 輸出 output 乙個演算法有乙個或多個輸出,以反映對輸入資料加工後的結果。沒有輸出的演算法是毫無意義的。可以在控制台列印輸出或者返回乙個或多個值等。確定性 defi...