時間複雜度和空間複雜度簡述

2022-02-27 12:37:51 字數 1606 閱讀 6535

定義:乙個演算法中的語句執行次數稱為語句頻度時間頻度;

約定:檢驗演算法的效率,主要考慮最壞時間複雜度平均時間複雜度一般不特別說明,討論的時間複雜度均是最壞情況下的時間複雜度

1、時間複雜度

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

在時間頻度中,n稱為問題的規模,當n不斷變化時,時間頻度t(n)也會不斷變化。但是它的變化是有規律的,所以引入時間複雜度這個概念。一般情況下,演算法中的基本操作重複次數的是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。

計算時間複雜度

(1) 如果演算法的執行時間不隨著問題的規模n的增長而增長,即使演算法中有上千條語句,執行時間也只是乙個比較大的常數。此類演算法的時間複雜度為o(1);

按數量級遞增排列,常見的時間複雜度有:常數階o(1),對數階o(log2n),線性階o(n), 線性對數階o(nlog2n),平方階o(n2),立方階o(n3),..., k次方階o(nk),指數階o(2n)。隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。

1 i = 100000;

2while(i--)

解答:這個演算法迴圈100000次,雖然它執行次數非常多,但是主要執行的第三行的執行時間是常數值,所以他的時間複雜度為常數階o(1);

(2) 當有多個迴圈巢狀時,演算法的時間複雜度是由巢狀層數最多的迴圈語句的語句頻度決定的

1 x=0; 

2for(i=1;i<=n;i++)

3for(j=1;j<=i;j++)

4for(k=1;k<=j;k++)

5 x++;

這個演算法中主要執行的是第5行,它的執行時間是常數值,但是它上面有三層迴圈,每層每次分別執行是(從最外層到內) [(n-1) ],[(n-1)+(n-2) ....],[(n-1-1)+(n-2-1) ....] 次,所以該演算法的時間複雜度為o(n3+ 剩餘低次項) ≈o(n3);

ps: 簡單的計算方式(只能參考): 乙個迴圈為n,乙個巢狀是n+1,並列時是+n,最後結果取最大項;

2、空間複雜度

乙個程式的空間複雜度是指執行完乙個程式所需記憶體的大小。

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

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

乙個演算法所需的儲存空間用f(n)表示。s(n)=o(f(n)) 其中n為問題的規模,s(n)表示空間複雜度。

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

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

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

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

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

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