演算法時間複雜度

2021-06-25 07:34:31 字數 1385 閱讀 7009

乙個演算法的時間複雜度(time complexity)是指該演算法的執行時間與問題規模的對應關係。乙個演算法是由控制結構和原操作構成的,其執行的時間取決於二者的綜合效果。為了便於比較同一問題的不同演算法,通常把演算法中基本操作重複執行的次數(頻度)作為演算法的時間複雜度。演算法中的基本操作一般是指演算法中最深層迴圈內的語句,因此,演算法中基本操作語句的頻度是問題規模n的某個函式f(n),記作:t(n)=o(f(n))。其中「o」表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,或者說,用「o」符號表示數量級的概念。

如果乙個演算法沒有迴圈語句,則演算法中基本操作的執行頻度與問題規模n無關,記作o(1),也稱為常數階。如果演算法只有乙個一重迴圈,則演算法的基本操作的執行頻度與問題規模n呈線性增大關係,記作o(n),也叫線性階。常用的還有平方階o(n2)、立方階o(n3)、對數階o(log2n)等。

(一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。

在各種不同演算法中,若演算法中語句執行次數為乙個常數,則時間複雜度為o(1),另外,在時間頻度不相同時,時間複雜度有可能相同,如t(n)=n2

+3n+4與t(n)=4n2+2n+1它們的頻度不同,但時間複雜度相同,都為o(n2)。

按數量級遞增排列,常見的時間複雜度有:

常數階o(1),對數階o(log2n),線性階o(n),

線性對數階o(nlog2n),平方階o(n2),立方階o(n3),...,

k次方階o(nk),指數階o(2n)。隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。

)下面舉例來說明計算演算法時間複雜度的方法。

【例1-4】 分析以下程式的時間複雜度。

x=n; /*n>1*/

y=0;

while(y < x)

解:這是一重迴圈的程式,while迴圈的迴圈次數為n,所以,該程式段中語句①的頻度是n,則程式段的時間複雜度是t(n)=o(n)。

【例1-5】 分析以下程式的時間複雜度。

for(i=1;i1*/

y=0;

while(x >= (y+1)*(y+1))

解:這是一重迴圈的程式,while迴圈的迴圈次數為n,所以,該程式段中語句①的頻度是n,則程式段的時間複雜度是t(n)=o(n)。

【例1-7】 分析以下程式的時間複雜度。

for(i=0;i解:這是三重迴圈的程式,最外層for迴圈的迴圈次數為m,中間層for迴圈的迴圈次數為t,最裡層for迴圈的迴圈次數為t,所以,該程式段中語句①的頻度是m*n*t,則程式段的時間複雜度是t(n)=o(m*n*t)

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

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

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

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

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

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