[導論]
線上資源
本書對象
程式語言
--為什麼是C語言?
--靜態關鍵字
--導入的檔案
--記憶體釋放
主題
解題系統
題目描述的構成
題目:取餐排隊
--解開問題
筆記
[第1章_雜湊表]
題目一:獨特雪花
--問題
--簡化問題
--解決核心問題
--解答一:逐對比較
--解答二:減輕工作量
雜湊表
--設計雜湊表
--為什麼要使用雜湊表?
題目二:複合詞
--問題
--辨別複合詞
--解答
題目三:拼字檢查─刪除字母
--問題
--思索雜湊表
--一個量身打造的解答
摘要
筆記
[第2章_樹與遞迴]
題目一:萬聖節糖果收集
--問題
--二元樹
--解決一個較簡單的實例
--二元樹表示方法
--收集所有糖果
--一個完全不一樣的解答
--走最少街道
--讀取輸入
為什麼要使用遞迴?
題目二:子孫的距離
--問題
--讀取輸入
--一個節點的子孫數目
--全部節點的子孫數目
--節點排序
--輸出資訊
--main函數
總結
筆記
[第3章_記憶法與動態規劃]
題目一:漢堡狂熱
--問題
--產生一個計畫
--刻劃最佳解
--解答一:遞迴
--解答二:記憶法
--解答三:動態規劃
記憶法與動態規劃
--步驟一:最佳解的結構
--步驟二:遞迴解
--步驟三:記憶法
--步驟四:動態規劃
題目二:守財奴
--問題
--刻劃出最佳解
--解答一:遞迴
--解答二:記憶法
題目三:冰球世仇
--問題
--關於世仇
--刻劃出最佳解
--解答一:遞迴
--解答二:記憶法
--解答三:動態規劃
--空間最佳化
題目四:及格方法
--問題
--解答:記憶法
總結
筆記
[第4章_圖與廣度優先搜尋]
題目一:騎士追逐
--問題
--最佳化移動
--騎士的最佳結果
--騎士反反覆覆
--時間最佳化
圖(Gragh)與 BFS
--什麼是圖?
--圖vs.樹
--圖上的BFS
題目二:攀爬繩子
--問題
--解答一:找出動作
--解答二:重新建模
題目三:書籍翻譯
--問題
--圖的建立
--BFS
--總成本
總結
筆記
[第5章_加權圖中的最短路徑]
題目一:老鼠迷宮
--問題
--從BFS繼續邁進
--加權圖中的最短路徑
--圖的建立
--實作Dijkstra演算法
--兩種最佳化
Dijkstra演算法
--Dijkstra演算法的執行時間
--負權重邊
題目二:拜訪奶奶規劃
--問題
--相鄰矩陣
圖的建立
--怪異路徑
--任務一:最短路徑
--任務二:最短路徑的數目
總結
筆記
[第6章_二元搜尋]
題目一:螞蟻餵食
--問題
--新風味的樹問題
--讀取輸入
--可行性測試
--搜尋解答
二元搜尋
--二元搜尋的執行時間
--判斷可行性
--搜尋排序過的陣列
題目二:跳躍河流
--問題
--貪婪演算法的思路
--測試可行性
--搜尋解答
--讀取輸入
題目三:生活品質
--問題
--排序所有的矩形
--二元搜尋
--測試可行性
--更快速測試可行性
題目四:洞穴門
--問題
--解決子任務
--使用線性搜尋
--使用二元搜尋
總結
筆記
[第7章_堆積與區段樹]
題目一:超市促銷
--問題
--解答一:陣列中的最大值與最小值
--最大堆積
--最小堆積
--解答二:堆積
堆積
--兩個額外的應用
--選擇一個資料結構
題目二:建立樹堆
--問題
--遞迴輸出樹堆
--根據標籤排序
--解答一:遞迴
--區間最大值查詢
--區段樹
--解答二:區段樹
區段樹
題目三:二元素和
--題目
--填寫區段樹
--查詢區段樹
--更新區段樹
--main函數
總結
筆記
[第8章_聯集尋找]
問題一:社群網路
--問題
--用圖來模擬
--解答一:BFS
--聯集尋找
--解答二:聯集尋找
--最佳化一:依大小聯集
--最佳化二:路徑壓縮
聯集尋找
--關聯:三個需求
--選擇聯集尋找
--最佳化
題目二:朋友與敵人
--問題
--擴充:敵人
--main函數
--尋找和聯集
--SetFriends與SetEnemies
--AreFriends與AreEnemies
題目三:抽屜雜務
--問題
--等價抽屜
--main函數
--尋找和聯集
總結
筆記
後記
[附錄A_演算法執行時間]
計時與其他東西之事件簿
大O符號
--線性時間
--常數時間
--另一個例子
--平方時間
--本書中的大O
[附錄B_因為我忍不住]
獨特雪花:隱式鏈結串列
漢堡狂熱:重建解答
騎士追逐:編碼移動
Dijkstra演算法:使用堆積
--老鼠迷宮:用堆積來追蹤
--老鼠迷宮:用堆積來實作
路徑壓縮的壓縮
--步驟一:不使用三元運算子
--步驟二:較簡潔的指派運算子
--步驟三:理解遞迴
[附錄C_題目貢獻者]