算法的復雜度:


算法的復雜度:

我們一般用兩個維度形容一個算法的資源消耗,以此來判斷我們的算法是否優良,它們就是“時間復雜度”與“空間復雜度”

時間復雜度:

時間復雜度:指執行算法需要的計算工作量。
每個算法的語句執行次數與時間成正比,執行次數越多,花費的時間也就越多,這個語句執行次數我們稱之為語句頻度或時間頻度,記為T(n)。n為問題的規模,當n不斷變化時,時間頻度T(n)也會變化,若有某個輔助函數f(n),存在一個正常數c,使f(n)*c>=T(n)恆成立,記作T(n)=O(f(n)),稱O(f(n))為算法的漸進時間復雜度,簡稱時間復雜度。意味着O(f(n))為執行這個算法所消耗時間的最大值。
在各種不同算法中,若算法中執行語句執行次數為一個常數,則時間復雜度為O(1)。另外,在時間頻度不相同時,時間復雜度有可能相同,如T(n)=n^2+3n+4 與 T(n)=4n^2+2n+1它們的頻度不同,但時間復雜度相同,都為O(n^2),因為時間復雜度代表了資源消耗與n遞增時的關系,相比n^2,在n越來越大時,n或k*n對T(n)的影響就非常小了。
按數量級遞增排列,常見的時間復雜度有:

  • 常數級O(1)
  • 對數級O(log2n)(以2為底n的對數)
  • 線性級O(n)
  • 線性對數級O(n*log2n)
  • 平方級O(n^2)或k方級O(n^k)
  • 指數級O(2^n)或O(k^n)

    常見算法時間復雜度:哈希O(1),數組遍歷O(n),歸並排序O(nlogn),冒泡排序、選擇排序O(n^2),背包算法O(2^n)

空間復雜度:

空間復雜度: 指算法在計算機內執行時所需存儲空間的度量,記作S(n)=O(f(n))。
算法執行期間所需要的存儲空間分為3個部分:

  • 算法程序所占的空間
  • 輸入的初始數數據所占的存儲空間
  • 算法執行過程中所需要的額外空間

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com