演算法基礎:複雜度與 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)