1.Big O 學習筆記

Claire Wei
ClaireWei
Published in
Jul 17, 2021

學習資料來源: Master the Coding Interview: Data Structures + Algorithms

什麼是好的程式碼: 1.Readable 2.Scalable,Scalable的衡量分為:

1.空間複雜度(Space Complexity): 執行演算法花費的記憶體空間。

2.時間複雜度(Time Complexity): 執行演算法時須花費的時間。

=> Big O 用來衡量不同演算法時間複雜度,當處理的資料量持續增加時,程式執行時間增加的比率:

(1)佳: O(1)、O(log n)、O(n)

(2)可接受: O(n log n)

(3)差: O(n ^ 2)、O(2 ^ n)、O*(n!)

【Big O Cheat Sheet】

  • O(1) Constant- 沒有迴圈,執行時間不會隨輸入的資料量增加而增加。
  • O(log N) Logarithmic- 通常出現在使用searching algorithms的情況(Binary Search),資料經過排序(sorted),資料可以對半處理
  • O(n) Linear- 跑一次迴圈(依次處理n個項目)
  • O(n log(n)) Log Linear 通常處理排序(sorting)的操作
  • O(n²) Quadratic- 跑兩次迴圈,迴圈內有迴圈(nested loops)
  • O(2^n) Exponential- 通常出現在使用recursive algorithms的情況
  • O(n!) Factorial- 將每個元素都加上迴圈
  • 遍歷一半的資料仍然是:O(n)
  • 處理兩個獨立的資料:O(a * b)

範例

【Big O Rule Book】

1.Worst Case 最糟情況執行次數

2.Remove Constant 去除常數,如:O(n/2 + 1) -> O(n)

3.Different terms for inputs 分別計算不同輸入資料,如:O(n + n)、O(n * n)

(1)O(n + n): 兩筆資料在不同步驟

(2)O(n * n): 兩筆資料的步驟為巢狀關係

4.Drop Non Dominants 留下最主要影響的項目,如:O(n + n²) -> O(n²)

練習:

回到筆記列表,文章中的內容如果有誤,歡迎提醒告知,謝謝!

--

--