Algorithms 演算法 - paulip114/blog GitHub Wiki

常見演算法(Algorithms)總整理

🧮 一、排序演算法(Sorting Algorithms)

演算法 時間複雜度 穩定性 適用情境
Bubble Sort O(n²) 教學用途、概念簡單
Selection Sort O(n²) 教學用途
Insertion Sort O(n²) 資料幾乎已排好(小規模)
Merge Sort O(n log n) 穩定高效,適合大型資料集
Quick Sort 平均 O(n log n) / 最差 O(n²) 實務中非常常用,平均效能優異
Heap Sort O(n log n) 不需額外空間、實作優先順序排序
Radix Sort O(nk) 適合大量數字排序(如電話號碼、ID)

🔍 二、搜尋演算法(Searching Algorithms)

演算法 時間複雜度 適用情境
Linear Search O(n) 小資料集或無序資料
Binary Search O(log n) 已排序的陣列
Depth-First Search(DFS) O(V + E) 圖 / 樹搜尋、遞迴遍歷
Breadth-First Search(BFS) O(V + E) 圖 / 樹搜尋、找最短路徑(不含權重)
Ternary Search O(log n) 單峰函數找最大/最小(進階)

🧠 三、分治 / 遞迴(Divide & Conquer / Recursion)

技巧 說明 常見應用
Divide & Conquer 問題分小塊 → 解決 → 合併 Merge Sort、Quick Sort、Binary Search
Recursion 函數自己呼叫自己 樹遍歷、費氏數列、背包問題、子集

📦 四、貪婪演算法(Greedy Algorithms)

概念 說明 常見應用
每一步都選擇當前最好(局部最優) → 嘗試達成整體最優 結果不一定最優,但效率高
應用範例 - 活動選擇問題
  • 最小生成樹(Kruskal、Prim)
  • Huffman 編碼
  • 換零錢問題(部分情況)|

📚 五、動態規劃(Dynamic Programming, DP)

概念 說明 常見應用
子問題 + 記憶化(Memoization) 儲存重複子問題結果,避免重算 費氏數列、背包問題、最長公共子序列、剪繩子、找最大利潤
狀態轉移 根據前一狀態推導出目前狀態 DP Table 或遞迴搭配 cache 實作

🌳 六、圖論演算法(Graph Algorithms)

演算法 說明 時間複雜度 適用情境
BFS / DFS 圖的基本遍歷 O(V + E) 尋找路徑、聯通區塊
Dijkstra 單源最短路徑(非負權重) O(E log V) 地圖導航、最短距離
Bellman-Ford 處理負權圖的最短路徑 O(VE) 有負邊權的圖
Floyd-Warshall 所有點對點的最短路徑 O(V³) 小圖、全距離查詢
Prim / Kruskal 最小生成樹 O(E log V) 網路連線、鋪電纜
Topological Sort 有向無環圖(DAG)排序 O(V + E) 任務排序(前置條件處理)
Union-Find 判斷集合是否聯通、合併集合 幾乎 O(1) 圖中連通區塊、社群判斷

🔢 七、數學與字串演算法

分類 演算法 用途
數學 最大公因數(GCD)/ 最小公倍數(LCM) 比例、分數、數字問題
快速冪(Fast Exponentiation) 大數次方、加密運算
篩法(Sieve of Eratosthenes) 找所有質數
組合 / 排列 統計、遞迴 / DFS
字串處理 KMP、Rabin-Karp、Boyer-Moore 字串比對演算法(比原始比對快)
Trie 前綴查詢、自動補字
Z-algorithm 找子字串(類似 KMP)

🧠 八、其他常見演算法技巧

技巧 概念 用途 / 範例
Sliding Window 移動範圍來降低重複運算 最長子陣列、固定長度計算平均、兩指標
Two Pointers 兩指標向中間移動,常配排序使用 合併排序陣列、找兩數和為 target
Binary Search(進階) 不只查單點,也可查最小最大條件 最小可行值、搜尋答案空間
Backtracking 試錯、回朔法 N 皇后、數獨、排列組合
Bit Manipulation 位元操作 權限控制、找單一重複元素

  • 📋 面試時很常考:

    • 排序 + 搜尋(尤其是 Binary Search)
    • BFS / DFS
    • Sliding Window / Two Pointers
    • Dynamic Programming(DP)
    • 貪婪法 + Backtracking
  • ⚙️ 實務開發中常遇到:

    • HashMap / Stack / Queue
    • 排序 + Trie(字串輸入)
    • Graph(導航、推薦系統)
    • DP(優化成本、資源分配)