資料結構與演算法
這個系列記錄資料結構與演算法的學習筆記。每篇筆記包含概念說明、ASCII 視覺化圖解、Java 實作程式碼與時間/空間複雜度分析。
學習路線建議
不知道從哪裡開始?依照以下難度分級,循序漸進學習:
| 難度 | 說明 | 建議對象 |
|---|---|---|
| ⭐ 入門 | 最基礎的資料結構與演算法,先從這些開始 | 初學者、非本科轉職 |
| ⭐⭐ 進階 | 需要入門基礎,面試常考 | 有基礎想加強、準備面試 |
| ⭐⭐⭐ 挑戰 | 較複雜的結構與技巧,競程或進階面試才會用到 | 競程選手、資深工程師 |
⭐ 入門(先學這些):Array、Linked List、Stack、Queue、Hash Table、Linear Search、Sorting basics
⭐⭐ 進階:Tree、Heap、Graph、Binary Search、Dynamic Programming、Recursion、Two Pointers、Sliding Window
⭐⭐⭐ 挑戰:Trie、AVL Tree、Segment Tree、Advanced Graph、Backtracking、String Algorithms、Math Algorithms
資料結構(Data Structures)
基礎資料結構
| # | 主題 | 難度 | 說明 |
|---|---|---|---|
| 01 | Array 陣列 | ⭐ | 連續記憶體、隨機存取、動態擴容 |
| 02 | Linked List 鏈結串列 | ⭐ | 單向/雙向、插入刪除 O(1)、指標操作 |
| 03 | Stack 堆疊 | ⭐ | LIFO、括號匹配、運算式求值 |
| 04 | Queue 佇列 | ⭐ | FIFO、Circular Queue、BFS 應用 |
| 05 | Hash Table 雜湊表 | ⭐ | 雜湊函數、碰撞處理、O(1) 查找 |
| 06 | Tree 樹 | ⭐⭐ | BST、遍歷方式、前中後序 |
| 07 | Heap 堆積 | ⭐⭐ | Min/Max Heap、Priority Queue、Heapify |
| 08 | Graph 圖 | ⭐⭐ | 鄰接表/矩陣、BFS/DFS、有向/無向 |
進階資料結構
| # | 主題 | 難度 | 說明 |
|---|---|---|---|
| 09 | Trie 前綴樹 | ⭐⭐⭐ | 字串搜尋、自動補全、前綴匹配 |
| 10 | AVL Tree 自平衡樹 | ⭐⭐⭐ | 旋轉操作、平衡因子、O(log n) 保證 |
| 11 | Segment Tree 線段樹 | ⭐⭐⭐ | 區間查詢、區間更新、Lazy Propagation |
| 12 | Fenwick Tree 樹狀陣列 | ⭐⭐⭐ | 前綴和、單點更新、BIT |
| 13 | Union-Find 並查集 | ⭐⭐⭐ | 路徑壓縮、按秩合併、連通分量 |
| 14 | LRU Cache | ⭐⭐ | HashMap + 雙向鏈結串列、O(1) 操作 |
| 15 | Deque 雙端佇列 | ⭐⭐ | 頭尾皆可操作、滑動視窗應用 |
| 16 | Skip List 跳躍表 | ⭐⭐⭐ | 多層索引、機率平衡、Redis 應用 |
| 17 | Bloom Filter 布隆過濾器 | ⭐⭐⭐ | 機率型資料結構、空間效率、誤判率 |
演算法(Algorithms)
基礎演算法
| # | 主題 | 難度 | 說明 |
|---|---|---|---|
| 01 | Searching 搜尋 | ⭐ | Linear Search、Binary Search |
| 02 | Sorting 排序 | ⭐ | Bubble、Selection、Insertion、Merge、Quick Sort |
| 03 | Dynamic Programming 動態規劃 | ⭐⭐ | Fibonacci、LCS、背包、Coin Change、LIS |
| 04 | Recursion 遞迴 | ⭐⭐ | 階乘、費氏數列、河內塔、回溯法 |
| 05 | Graph Algorithms 圖演算法 | ⭐⭐ | Dijkstra、Bellman-Ford、Floyd-Warshall、拓撲排序 |
| 06 | Greedy 貪婪演算法 | ⭐⭐ | 活動選擇、分數背包、Huffman、Kruskal |
進階演算法與技巧
| # | 主題 | 難度 | 說明 |
|---|---|---|---|
| 07 | String Algorithms 字串演算法 | ⭐⭐⭐ | KMP、Rabin-Karp、Z Algorithm、Manacher |
| 08 | Bit Manipulation 位元運算 | ⭐⭐ | AND/OR/XOR、位元技巧、常見應用 |
| 09 | Two Pointers 雙指標 | ⭐⭐ | 相向指標、同向指標、快慢指標 |
| 10 | Sliding Window 滑動視窗 | ⭐⭐ | 固定/可變視窗、最大/最小子陣列 |
| 11 | More Sorting 進階排序 | ⭐⭐⭐ | Heap、Counting、Radix、Bucket、Shell Sort |
| 12 | Advanced Graph 進階圖論 | ⭐⭐⭐ | Prim、Tarjan SCC、割點橋、二分圖匹配 |
| 13 | Backtracking 回溯法 | ⭐⭐⭐ | N-Queens、排列組合、子集生成 |
| 14 | Divide and Conquer 分治法 | ⭐⭐ | 合併排序、快速冪、最近點對 |
| 15 | Monotone Stack 單調堆疊 | ⭐⭐⭐ | 下一個更大元素、柱狀圖最大矩形 |
| 16 | Prefix Sum 前綴和 | ⭐⭐ | 一維/二維前綴和、差分陣列 |
| 17 | Math Algorithms 數學演算法 | ⭐⭐⭐ | GCD、質數篩、快速冪、組合數學 |
閱讀建議
- 入門者:從 ⭐ 入門的文章開始,建立資料結構與演算法的基礎觀念。
- 面試準備:重點看 ⭐⭐ 進階,特別是 03 動態規劃、09 雙指標、10 滑動視窗、13 回溯法。
- 競程選手:⭐⭐⭐ 挑戰級的進階資料結構(11-13)和進階圖論(12)是常見考點。
- 實務開發:05 Hash Table、14 LRU Cache、17 Bloom Filter 在生產系統中最常出現。