演算法複雜度

2021-09-16 18:14:11 字數 1647 閱讀 7611

演算法複雜度

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

1、時間複雜度

在電腦科學中,演算法的時間複雜度是乙個函式,它定量的描述了該演算法的執行時間,時間複雜度常用大寫o表示,不包括這個函式的低階項和首項係數。

常見的時間複雜度有:

常數階o(1),

對數階o(log2 n),

線性階o(n),

線性對數階o(n log2 n),

平方階o(n^2),

立方階o(n^3)

k次方階o(n^k),

指數階o(2^n)。

隨著n的增大,時間複雜度增大,演算法花費時間越多,效率也會越低。

計算方法

①選取相對增長最高的項

②最高項係數是都化為1

③若是常數的話用o(1)表示

如f(n)=2n^3+2n+100,

則o(n)=n^3。

(1)

int i=0;

while(i<10)

該演算法執行10次,次數是常數,則其時間複雜度為o(1);

(2)

for(int i=0;i這是乙個巢狀for迴圈,外層執行一次,則內層執行n次,其時間複雜度為o(n^2)

(3)int i=0;

while(i在此迴圈,如果 arr[i] 不等於1的話,時間複雜度是o(n)。如果arr[i]等於1的話,則迴圈執行一次判斷跳出,時間複雜度是o(1)。

2、空間複雜度

乙個程式的空間複雜度是指執行完乙個程式所需記憶體的大小。利用程式的空間複雜度,可以對程式的執行所需的記憶體多少有個預先估計,乙個程式執行時除了需要記憶體空間和儲存本身所使用的指令、常數、變數和輸入資料外,還需要一些對資料進行操作的工作單元和儲存一些為實現計算所需的輔助空間。程式執行時所需儲存空間包括以下兩個部分:

(1) 固定部分:這部分空間的大小與輸入/輸出資料的個數多少、大小無關,主要包括指令空間,資料空間等所佔的空間,這部分屬於靜態空間。

(2) 可變空間:這部分空間主要包括動態分配的空間、遞迴棧所需的空間。這部分空間的大小與演算法有關。

乙個演算法所需的空間用f(n)表示:

s(n)=o(f(n))

其中,n為問題的複雜度,s(n)為空間複雜度。

計算方法:

①忽略常數,用o(1)表示

②遞迴演算法的空間複雜度=遞迴深度n*每次遞迴所要的輔助空間

③對於單執行緒來說,遞迴有執行時堆疊,求的是遞迴最深的那一次壓棧所耗費的空間的個數,因為遞迴最深的那一次所耗費的空間足以容納它所有遞迴過程。

(1)int a;

int b;

int c;

printf("%d %d %d \n",a,b,c);

它的空間複雜度o(n)=o(1);

(2)

int fun(int n)else

}

遞迴實現,呼叫fun函式,每次都建立1個變數k。呼叫n次,空間複雜度o(n*1)=o(n)。

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

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

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

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

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

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