Back to Blog

演算法基礎:複雜度與 Big O 表示法

#什麼是演算法?

演算法是一系列為了解決特定問題而設計的指令。一個好的演算法應該是有效率的,也就是說,它應該在合理的時間內完成,並且不會佔用太多的記憶體。

#複雜度 (Complexity)

我們使用複雜度來衡量一個演算法的效率。複雜度可以分為兩種:

  • 時間複雜度 (Time Complexity): 衡量演算法執行所需的時間。
  • 空間複雜度 (Space Complexity): 衡量演算法執行所需的記憶體空間。

#Big O 表示法

Big O 表示法是一種用來描述演算法時間複雜度的數學表示法。它描述了當輸入資料量增加時,演算法執行時間的增長趨勢。

常見的 Big O:

  • O(1) (常數時間): 執行時間是固定的,不會因為輸入資料量的增加而改變。
  • O(log n) (對數時間): 執行時間會隨著輸入資料量的增加而緩慢增加。
  • O(n) (線性時間): 執行時間會隨著輸入資料量的增加而線性增加。
  • O(n log n) (線性對數時間): 執行時間的增長速度介於線性和平方之間。
  • O(n^2) (平方時間): 執行時間會隨著輸入資料量的增加而平方增加。

#陣列和物件的複雜度

#物件 (Object)

  • 插入 (Insertion): O(1)
  • 移除 (Removal): O(1)
  • 搜尋 (Searching): O(n)
  • 存取 (Accessing): O(1)

#陣列 (Array)

  • 插入 (Insertion): push 是 O(1),unshift 是 O(n)
  • 移除 (Removal): pop 是 O(1),shift 是 O(n)
  • 搜尋 (Searching): O(n)
  • 存取 (Accessing): O(1)