時間複雜度與空間複雜度

2021-08-13 04:54:35 字數 2574 閱讀 2758

本文是對時間複雜度以及空間複雜度的乙個理解

時間複雜度

由於環境的不同,同樣的**執行所需要的時間是不同的,所以是不能拿來比較的

而函式中執行的次數確實一樣的

所以時間複雜度就是

程式每個迴圈中的語句總共會執行的次數

時間複雜度的表示方法——大o漸進表示法

o(f(n))

這裡的f(n)是什麼呢?

void test(int n)

} for (int k = 0; k < 2 * n; ++k)

int count = 10;

while (count--)

}

上面函式的執行次數可以這樣表示  f(n) =   n^2 + 2*n + 10

乙個演算法語句總的執行次數是關於問題規模n的某個函式,記為f(n),n 稱為問題的規模。語句總的執行次數記為t(n),當n不斷變化時,t(n)也 在變化,演算法執行次數的增長速率和f(n)的增長速率相同。則有t(n) = o(f(n)),稱o(f(n))為時間複雜度的o漸進表示法

但 f(n) 這個函式又是多少呢?這裡就需要時間複雜度的演算法了

一般演算法o(n)計算方法:

用常數1取代執行時間中的所有加法常數 

在修改後的執行次數函式中,只保留最高端項 

去除函式中所有不為次數的常數  

例:2*n —> n

所以上面函式的時間複雜度就可以得到了  o(n^2)     //由於不會打出n方,只能用n^2表示了,望諒解

空間複雜度

空間複雜度就是函式中建立物件的個數

空間複雜度也是用o 的漸進表示法表示

計算方法可以參考時間複雜度的計算方法,這裡就不寫了

int sum(int n) 

空間複雜度位:o(1)   —>只建立了乙個臨時變數

下面實現兩個函式

1、實現二分查詢演算法的遞迴及非遞迴。

//非遞迴

int binary_search(int arr, int len, int a)

else if (a > arr[maddle])

else if (a < arr[maddle])

}return -1;

}int main()

; int len = sizeof(arr) / sizeof(arr[0]);

printf("%d\n", binary_search(arr, len, 3));

printf("%d\n", binary_search(arr, len, 10));

return 0;

}//遞迴

//我的這個函式傳的引數比較多

int binary_search(int arr, int len, int a, int left, int right, int maddle)

else

}return maddle;

}int main()

; int len = sizeof(arr) / sizeof(arr[0]);

int left = 0;

int right = len - 1;

int maddle = maddle = left + (right - left) / 2;

printf("%d\n", binary_search(arr, len, 3, left, right, maddle));

printf("%d\n", binary_search(arr, len, 10, left, right, maddle));

return 0;

}

這裡計算一下時間複雜度與空間複雜度

時間複雜度: 

非遞迴  o(logn)   這裡要倒過來理解,乙個數找了三次才找到,一次會去掉一半的數,所以總的個數就是2^3=8

所以這裡的次數就是 logn

遞迴  o(logn)   

函式每次執行的時間複雜度為o(1),執行遞迴的次數同非遞迴的二分查詢次數,所以時間複雜度也                              是o(logn);  

空間複雜度:

非遞迴  o(1)            

遞迴  o(1)     都只建立了乙個臨時變數

2、實現斐波那契數列的遞迴及非遞迴

//非遞迴

int recursive(int n)

} }

if (n % 2 == 0)

return a;

else

return b;

}//遞迴

int recursive(int n)

時間複雜度: 

非遞迴  o(n)     

遞迴  o(2^n)   

空間複雜度:

非遞迴  o(1)      

遞迴  o(1)     

時間複雜度與空間複雜度

空間複雜度 space complexity 是對乙個演算法在執行過程中臨時占用儲存空間大小的量度,記做s n o f n 比如直接 插入排序 的時間複雜度 是o n 2 空間複雜度是o 1 而一般的 遞迴演算法就要有o n 的空間複雜度了,因為每次遞迴都要儲存返回資訊。乙個演算法的優劣主要從演算法...

時間複雜度與空間複雜度

本文部分取自搜狗百科 在求演算法效率時,通常有事前分析和事後分析兩種方法,事後分析因為必須實際檢驗過後才能得出答案,且可能由於硬體方面等外部原因影響結果而不被推廣,事前分析的主要就是在考量乙個演算法的基本執行次數,這就是時間複雜度。時間複雜度 一般情況下,演算法中基本操作重複執行的次數是問題規模n的...

時間複雜度與空間複雜度

一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式f n 演算法的時間度量記 t n o f n 它表示問題規模隨n的增大,演算法執行時間的增長率和f n 的增長率相同,稱做演算法的漸近時間複雜度,簡稱時間複雜度。例如 void test0 int n 總執行次數f n 10 時間複雜...