1. 程式人生 > >資料結構01--時間複雜度與空間複雜度

資料結構01--時間複雜度與空間複雜度

時間複雜度

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

如何分析一個演算法的時間複雜度呢?即如何推導大O階呢?

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

常用的時間複雜度所消耗的時間從小到大依次是:

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(2^n) < O(n!) < O(n^n)

空間複雜度

演算法的空間複雜度通過計算演算法所需的儲存空間實現,演算法的空間複雜度的計算公式記作:
S(n)=O(f(n))。其中,n為問題的規模,f(n)為語句關於n所佔儲存空間的函式。
通常,我們都是用“時間複雜度”來指執行時間的需求,是用“空間複雜度”指空間需求。