1. 程式人生 > 其它 >演算法時間複雜度和空間複雜度

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

時間複雜度一般看迴圈巢狀幾層,每一層的迴圈次數和哪個變數有關

語句總的執行次數T(n)是關於問題規模n的函式,進而分析T(n)隨n的變化情況並確定T(n)的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作:T(n)=0(f(n))。它表示隨問題規模n的增大,演算法執行時間的埔長率和 f(n)的增長率相同,稱作演算法的漸近時間複雜度,簡稱為時間複雜度。其中f( n)是問題規模n的某個函式。

空間複雜度就看你申請記憶體用了多少(陣列長度),與哪個變數有關

空間複雜度(Space Complexity)是對一個演算法在執行過程中臨時佔用儲存空間大小的量度,記做S(n)=O(f(n))。比如直接插入排序的時間複雜度是O(n^2),空間複雜度是O(1) 。而一般的遞迴演算法就要有O(n)的空間複雜度了,因為每次遞迴都要儲存返回資訊

分析一個演算法的時間複雜度步驟:

  • 用常數1取代執行時間中的所有加法常數。
  • 在修改後的執行次數函式中,只保留最高階項。
  • 如果最高階項存在且不是1,則去除與這個項相乘的常數。
  • 得到的最後結果就是大O階。

空間複雜度計算

  •  忽略常數,用O(1)表示 
  • 遞迴演算法的空間複雜度=遞迴深度N*每次遞迴所要的輔助空間 
  • 對於單執行緒來說,遞迴有執行時堆疊,求的是遞迴最深的那一次壓棧所耗費的空間的個數,因為遞迴最深的那一次所耗費的空間足以容納它所有遞迴過程。