進階演算法與資料結構
本章節進入演算法的核心領域,適合已具備基礎語法能力並希望提升解題技巧的讀者。內容涵蓋了競賽程式設計中最重要的資料結構與演算法概念,每個主題皆搭配實作範例與題解。
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 中的 set、map 及其多重集版本 (multiset, multimap),掌握高效的資料查找與維護技巧。
14. 樹#
探討樹狀結構的性質,包含二元樹的表示、樹的直徑計算以及各種遍歷方式 (DFS/BFS)。
15. 圖論#
進入圖論的世界,學習圖的儲存方式、廣度優先搜尋 (BFS)、深度優先搜尋 (DFS)、二分圖與拓撲排序。
16. 動態規劃#
程式競賽中的重頭戲。從 DP 的基本概念、狀態轉移設計、記憶化搜索到各類型的 DP 優化技巧。
17. 進階技巧#
介紹競程中常用的實用技巧,包含前綴和 (Prefix Sum)、差分陣列 (Difference Array)、單調性優化與 Deque 的應用。