第 2 章:核心概念

1. 堆疊輸出順序

輸入:A → B → C
操作:push A,push B,pop B,push C,pop C,pop A
輸出:B,C,A

每次 pop 必定取走「尚未取出而且最後放入」的元素。遇到可否輸出的題目,逐步模擬,不要憑直覺。

2. 雜湊與線性探查

雜湊位置 → 被佔用?→ 檢查下一格 → 必要時繞回開頭

雜湊函數只決定第一個位置,不一定是最後儲存位置。先計算 hash,再按碰撞規則逐格檢查。

3. 樹、圖與生成樹

物件是否連通有沒有環邊數規則
Tree(樹)沒有E = V − 1
Spanning tree(生成樹)連通原圖所有頂點沒有剛好 V − 1 條邊
Euler graph(歐拉圖)有(忽略孤立點)可以有每個頂點度數均為偶數

4. 最短路與最小生成樹

題目問甚麼應選工具
由一個起點到各點的最短距離Dijkstra,前提是邊權非負
連通全部頂點的最小總權重Kruskal 或 Prim

最短路樹與最小生成樹回答的是不同問題,不能互換。

5. 字串與樹狀結構

結構核心想法
Trie(前綴樹)多個字串共享前綴,節省結構
KMP prefix array記錄可重用的前後綴,避免模式字串完全重頭比對
Segment tree(線段樹)儲存區間資訊,快速回答區間查詢

每題先畫一個小例子,再選答案。

Built with LogoFlowershow