1一切从观察开始 2
1.1什么是算法 2
1.2汉诺塔问题 3
1.3汉诺塔问题的非递归算法 10
1.4发现算法的技巧 16
学习效果评测 18
2分而治之法 20
2.1何谓分而治之法 20
2.2找出最大值 21
2.3时间复杂度 23
2.4二维极点问题 25
2.5快速排序法 30
2.6快速排序法的时间复杂度 34
2.7寻找第k小值问题 40
2.8分而治之法的技巧 47
学习效果评测 48
3动态规划 50
3.1 何谓动态规划 50
3.2换零钱 50
3.3数字金字塔 54
3.4最长相同子字符串 58
3.5安排公司聚会 64
3.6动态规划的技巧 70
学习效果评测 72
4贪婪法 75
4.1何谓贪婪法 75
4.2最小成本生成树 75
4.3霍夫曼编码树 83
4.4贪婪法的陷阱:0-1背包问题 88
4.5单位时间工作调度问题 90
4.6证明贪婪法并介绍Matroid理论 96
4.7贪婪法的技巧 99
学习效果评测 100
5修剪与搜索法 103
5.1何谓修剪与搜索法 103
5.2找坏蛋问题 104
5.3猜数字问题 105
5.4约瑟夫问题 106
5.5简化的线性规划问题 113
5.6修剪与搜索法的技巧 119
学习效果评测 119
6树搜索法 122
6.1何谓树搜索法 122
6.2树状解空间:n个皇后问题 123
6.3回溯法:涂色问题 126
6.4广度优先搜索法:八数字谜题 128
6.5加速技巧:旅行商问题 131
6.6树搜索法的技巧 140
学习效果评测 141
7问题转换 144
7.1何谓问题转换 144
7.2将相异代表系问题转换成二分图上的匹配问题 145
7.3将二分图上的匹配问题转换成网络流图问题 147
7.4将网络流图问题转换成线性规划问题 150
7.5问题转换的技巧 152
学习效果评测 154
8图算法 156
8.1什么是图 156
8.2连通分支 157
8.3Dijkstra最短路径算法 160
8.4Bellman-Ford最短路径算法 168
8.5双连通分支 175
8.6图算法的技巧 193
学习效果评测 195
9计算几何 199
9.1何谓计算几何 199
9.2多边形中的点 200
9.3天空轮廓 203
9.4凸包 208
9.5最近点对 215
9.6计算几何的技巧 219
学习效果评测 220
10算法的难题 224
10.1什么是NP-Complete 224
10.2集合P和集合NP 225
10.3满足性问题 227
10.4多项式时间转换 229
10.5NP中的难题 230
10.6NP-Complete的性质 234
10.7NP-Complete的证明技巧 237
学习效果评测 241
11逼近算法 244
11.1什么是逼近算法 244
11.2最小顶点覆盖问题 244
11.3装箱问题 247
11.4平面上的旅行商问题 249
11.5逼近算法的技巧 252
学习效果评测 252
12随机算法 256
12.1什么是随机算法 256
12.2随机快速排序法 257
12.3质数测试 258
12.4最小割算法 259
12.5随机算法技巧 265
学习效果评测 265
参考文献 267