複雜度
複雜度是定性描述該演算法執行成本(時間/空間)函式,用來分析演算法的效率。
常用函數
- Big 用來表示一個複雜度的上界,定義為 有 ,例如 ,我們會注重最高項 ,且我們會 5 是常數,得出
- Big 用來表示一個複雜度的下界,對於任意的 , 都有 。
- Big 要同時滿足 Big 和 Big
Big 是我們比較常用的,其他兩個可能再一些地方會用到
常見複雜度
另外還有一個在並查集常見,即 ,近似於 ,可直接當作
時間/空間複雜度
- 時間複雜度:和運算有關,
*%
會比+-
還要久,而複雜度得項次會跟迴圈有關,初階競賽只會在意你的項次,只要不要太大基本都會過,進階些比賽,有可能出現常數過大,導致複雜度合理卻還是吃 TLE 的情況,這時候需要利用 "壓常數" 技巧,降低時間,讓程式 AC。 - 空間複雜度:則是跟你宣告的變數記憶體總和有關,比時間複雜度容易估計,在樹狀的資料結構,往往需要搭配動態記憶體,才不會因為開太多空間而吃了 MLE。
題外話,如果你在你的 array 不是開在全域內,開了 10 的 5,6 次,在執行時跑出 RE,那你有以下兩種解決方式
- 把 array 移至全域
- 加上 static,表示靜態變數