目 录
第1章 小型问题 1
1.1 斐波那契数列 1
1.1.1 尝试递归方法 1
1.1.2 利用基本情形 2
1.1.3 计算缓存技术 4
1.1.4 保持斐波那契简单 5
1.2 简单数据压缩 6
1.3 牢不可破的加密 9
1.3.1 数据排序 10
1.3.2 加密和解密 11
1.4 π的计算 12
1.5 汉诺塔 13
1.5.1 汉诺塔的建模 14
1.5.2 解决汉诺塔问题 15
1.6 实际应用 16
1.7 练习 17
第2章 搜索问题 19
2.1 DNA搜索 19
2.1.1 存储DNA 20
2.1.2 线性搜索 21
2.1.3 二分搜索 22
2.1.4 泛型示例 24
2.2 迷宫求解 25
2.2.1 生成随机迷宫 25
2.2.2 其他迷宫细节 26
2.2.3 深度优先搜索 28
2.2.4 广度优先搜索 32
2.2.5 A*搜索 34
2.3 传教士和食人族 39
2.3.1 问题表示 39
2.3.2 问题解决 42
2.4 实际应用 43
2.5 练习 44
第3章 约束满足问题 45
3.1 构建约束满足问题的解决 框架 46
3.2 澳大利亚地图着色问题 50
3.3 八皇后问题 53
3.4 单词搜索问题 55
3.5 SEND+MORE=MONEY问题 59
3.6 电路板布局问题 61
3.7 实际应用 61
3.8 练习 62
第4章 图问题 63
4.1 构建图框架 65
4.1.1 Edge的具体实现 70
4.1.2 Graph的具体实现 70
4.2 寻找最短路径 73
4.2.1 定义路径 73
4.2.2 广度优先搜索(BFS)回顾 74
4.3 最小化网络建设成本 77
4.3.1 权 77
4.3.2 寻找最小生成树 82
4.4 在带权图中寻找最短路径 88
4.5 实际应用 93
4.6 练习 94
第5章 遗传算法 95
5.1 生物学背景知识 95
5.2 预备知识 96
5.3 通用遗传算法 98
5.4 简单测试 105
5.5 重新讨论SEND+MORE=MONEY问题 108
5.6 遗传算法面临的挑战 112
5.7 实际应用 112
5.8 练习 113
第6章 k-均值聚类算法 115
6.1 预备知识 115
6.2 k-均值聚类算法 120
6.3 基于年龄和地理经度的州长聚类算法 124
6.4 k-均值聚类问题及其扩展 128
6.5 实际应用 129
6.6 练习 130
第7章 简单神经网络 131
7.1 来自生物学的灵感 131
7.2 人工神经网络 133
7.2.1 神经元 133
7.2.2 层 134
7.2.3 反向传播 135
7.2.4 整体情况 137
7.3 预备知识 138
7.3.1 借助随机化 138
7.3.2 快速算法 140
7.4 激活函数 141
7.5 构建神经网络 142
7.5.1 实现神经元 143
7.5.2 层的实现 144
7.5.3 神经网络的实现 146
7.6 分类问题 149
7.6.1 归一化数据 149
7.6.2 经典的iris(鸢尾属植物)数据集 150
7.6.3 葡萄酒分类问题 154
7.7 神经网络问题及其扩展 156
7.8 实际应用 157
7.9 练习 158
第8章 其他问题 159
8.1 背包问题 159
8.2 旅行推销员问题 163
8.2.1 简单方法 164
8.2.2 深层考虑 170
8.3 电话号码助记符 170
8.4 井字棋 172
8.4.1 管理状态 173
8.4.2 极小极大算法 175
8.5 实际应用 179
8.6 练习 180
附录A 术语表 181
附录B 更多资源 187
附录C Swift简史 193