快轉到主要內容

進階演算法與資料結構

本章節進入演算法的核心領域,適合已具備基礎語法能力並希望提升解題技巧的讀者。內容涵蓋了競賽程式設計中最重要的資料結構與演算法概念,每個主題皆搭配實作範例與題解。

1. 時間與空間複雜度
#

學習如何分析演算法的效率,了解 Big-O 表示法、均攤分析與空間複雜度,這是評估程式效能的基礎。

2. 列舉技巧
#

介紹窮舉法(Brute-force)的各種變形,包含基本的迴圈枚舉、二進位(位元)枚舉與排列枚舉技巧。

3. 遞迴
#

深入理解函式自我呼叫的機制,學習如何設計遞迴狀態、列舉遞迴以及透過剪枝優化效率。

4. 分治法
#

掌握「分而治之」的策略,將大問題切割成小問題解決,經典範例如合併排序 (Merge Sort) 與相關應用。

5. 二分搜尋
#

學習在有序序列中快速查找目標值的技巧,包含對陣列索引搜尋以及對答案進行二分搜的高階應用。

6. 二分搜尋題型題解
#

收錄二分搜尋的進階練習題,包含第 k 大問題、極值問題與 Minimax 等經典題型解析。

7. 雙指標
#

介紹利用兩個指標維護區間或搜尋的技巧,包含滑動視窗 (Sliding Window) 與相向指標的應用。

8. 鏈結串列
#

介紹 Linked List 資料結構,學習節點的串接、刪除與插入操作,以及其與陣列的差異。

9. 堆疊
#

掌握後進先出 (LIFO) 的 Stack 結構,並深入探討單調堆疊 (Monotonic Stack) 在尋找區間極值上的應用。

10. 佇列
#

介紹先進先出 (FIFO) 的 Queue 結構,以及優先佇列 (Priority Queue) 的使用方式。

13. 集合與映射
#

學習 C++ STL 中的 setmap 及其多重集版本 (multiset, multimap),掌握高效的資料查找與維護技巧。

14.
#

探討樹狀結構的性質,包含二元樹的表示、樹的直徑計算以及各種遍歷方式 (DFS/BFS)。

15. 圖論
#

進入圖論的世界,學習圖的儲存方式、廣度優先搜尋 (BFS)、深度優先搜尋 (DFS)、二分圖與拓撲排序。

16. 動態規劃
#

程式競賽中的重頭戲。從 DP 的基本概念、狀態轉移設計、記憶化搜索到各類型的 DP 優化技巧。

17. 進階技巧
#

介紹競程中常用的實用技巧,包含前綴和 (Prefix Sum)、差分陣列 (Difference Array)、單調性優化與 Deque 的應用。