【基礎】演算法的時間複雜度分析

小哈里發表於2020-10-05

1、什麼是時間複雜度?

  • 首先,解決一個問題肯定有許多種方式可以實現,那麼如何評價一個演算法的好壞?處理相同的資料量,用時更少,用的空間更少。
  • 那麼如何估算一個程式的執行時間與資料量的關係,這個函式就是演算法的時間複雜度。時間複雜度可被稱為是漸近的,程式指令運算次數。
  • 空間複雜度是演算法在執行過程中臨時佔用儲存空間大小的量度。

2、如何計算時間複雜度?

  • 既要知道常見演算法的複雜度,也要會分析自己程式的具體複雜度。
  • 常見的有
    O(n):KMP,尤拉篩法
    O(nlogn):線段樹
    O(n^2):某些dp
    O(n^3):Floyd
    O(2^n):二進位制列舉
    O(n!):列舉排列
  • 自己分析
    樹的遞迴,logn
    一層迴圈:n
    。。。。。
  • 更多請轉維基百科balabala的

2、如何在演算法題中運用時間複雜度?

  • 演算法競賽一般給出1s的時間限制和256MB的空間限制。
  • 對於1s的時間,能跑多少資料
    O(logn):很大,longlong以內都行
    O(n):10的7次方,也就是1000萬的資料
    O(nlogn):5*10^5,大約50萬的資料
    O(n^2):1000-5000左右
    O(n^3):200-500左右
    O(2^n):20-25
    O(n!):12左右
  • 對於256MB的空間,
    一個int,32位,4個位元組。256=2^28 = 67,108,864個in
    也就是6*10^7的資料,如果是long long,那麼少一半就可以了。

相關文章