目錄
第 1章 幾個小問題 1
1.1 斐波那契序列 1
1.1.1 嘗試第 一次遞歸 1
1.1.2 基線條件的運用 3
1.1.3 用結果緩存來救場 4
1.1.4 自動化的結果緩存 5
1.1.5 簡潔至上的斐波那契 6
1.1.6 用生成器生成斐波那契數 7
1.2 簡單的壓縮算法 7
1.3 牢不可破的加密方案 12
1.3.1 按順序讀取數據 12
1.3.2 加密和解密 13
1.4 計算( 15
1.5 漢諾塔 15
1.5.1 對塔進行建?!?6
1.5.2 求解漢諾塔問題 17
1.6 現(xiàn)實世界的應用 19
1.7 習題 20
第 2章 搜索問題 21
2.1 DNA搜索 21
2.1.1 DNA的存儲方案 22
2.1.2 線性搜索 23
2.1.3 二分搜索 24
2.1.4 通用示例 26
2.2 求解迷宮問題 28
2.2.1 生成一個隨機迷宮 29
2.2.2 迷宮的其他函數 30
2.2.3 深度優(yōu)先搜索 31
2.2.4 廣度優(yōu)先搜索 35
2.2.5 A*搜索 39
2.3 傳教士和食人族 44
2.3.1 表達問題 45
2.3.2 求解 47
2.4 現(xiàn)實世界的應用 48
2.5 習題 49
第3章 約束滿足問題 51
3.1 構建約束滿足問題的解決框架 52
3.2 澳大利亞地圖著色問題 55
3.3 八皇后問題 58
3.4 單詞搜索 60
3.5 字謎(SEND+MORE=MONEY) 63
3.6 電路板布局 65
3.7 現(xiàn)實世界的應用 66
3.8 習題 67
第4章 圖問題 69
4.1 地圖就是圖 69
4.2 搭建圖的框架 71
4.3 查找最短路徑 77
4.4 最小化網絡構建成本 79
4.4.1 權重的處理 79
4.4.2 查找最小生成樹 83
4.5 在加權圖中查找最短路徑 89
4.6 現(xiàn)實世界的應用 95
4.7 習題 96
第5章 遺傳算法 97
5.1 生物學背景知識 97
5.2 通用的遺傳算法 98
5.3 簡單測試 105
5.4 重新考慮SEND+MORE=MONEY問題 107
5.5 優(yōu)化列表壓縮算法 111
5.6 遺傳算法面臨的挑戰(zhàn) 113
5.7 現(xiàn)實世界的應用 114
5.8 習題 115
第6章 k均值聚類 117
6.1 預備知識 117
6.2 k均值聚類算法 119
6.3 按年齡和經度對州長進行聚類 124
6.4 按長度聚類邁克爾·杰克遜的專輯 128
6.5 k均值聚類算法問題及其擴展 130
6.6 現(xiàn)實世界的應用 131
6.7 習題 131
第7章 十分簡單的神經網絡 133
7.1 生物學基礎 133
7.2 人工神經網絡 135
7.2.1 神經元 135
7.2.2 分層 136
7.2.3 反向傳播 137
7.2.4 全貌 139
7.3 預備知識 140
7.3.1 點積 140
7.3.2 激活函數 140
7.4 構建神經網絡 142
7.4.1 神經元的實現(xiàn) 142
7.4.2 層的實現(xiàn) 143
7.4.3 神經網絡的實現(xiàn) 145
7.5 分類問題 148
7.5.1 數據的歸一化 148
7.5.2 經典的鳶尾花數據集 149
7.5.3 葡萄酒的分類 152
7.6 為神經網絡提速 155
7.7 神經網絡問題及其擴展 156
7.8 現(xiàn)實世界的應用 157
7.9 習題 157
第8章 對抗搜索 159
8.1 棋盤游戲的基礎組件 159
8.2 井字棋 161
8.2.1 井字棋的狀態(tài)管理 161
8.2.2 極小化極大算法 164
8.2.3 用井字棋測試極小化極大算法 167
8.2.4 開發(fā)井字棋AI 168
8.3 四子棋 169
8.3.1 四子棋游戲程序 170
8.3.2 四子棋AI 175
8.3.3 用α-β剪枝算法優(yōu)化極小化極大算法 177
8.4 超越α-β剪枝效果的極小化極大算法改進方案 178
8.5 現(xiàn)實世界的應用 179
8.6 習題 179
第9章 其他問題 181
9.1 背包問題 181
9.2 旅行商問題 186
9.2.1 樸素解法 186
9.2.2 進階 191
9.3 電話號碼助記符 191
9.4 現(xiàn)實世界的應用 193
9.5 習題 194
附錄A 術語表 195
附錄B 其他資料 201
附錄C 類型提示簡介 205