第1章 基础算法 1
1.1 分治算法 1
1.2 递归算法 8
1.3 枚举算法 14
1.4 贪心算法 20
第2章 排序、查找算法 29
2.1 基本排序算法 29
2.1.1 插入排序 29
2.1.2 冒泡排序 29
2.1.3 快速排序 30
2.1.4 其他排序 30
2.2 基本查找算法 31
2.2.1 顺序查找 31
2.2.2 折半查找 31
2.3 实例分析 32
2.4 小结 57
第3章 数据结构基础 58
3.1 常用数据结构简介 58
3.1.1 线段树简介 58
3.1.2 并查集简介 58
3.1.3 树状数组简介 58
3.2 实例分析 59
第4章 字符串 80
4.1 字符串匹配 80
4.1.1 朴素的字符串匹配算法 80
4.1.2 KMP算法 81
4.1.3 其他匹配算法 81
4.2 实例分析 81
4.3 小结 97
第5章 搜索算法 98
5.1 基本搜索算法 98
5.1.1 递归与迭代 98
5.1.2 深度优先搜索与广度优先搜索 98
5.1.3 回溯 98
5.2 搜索算法的一些优化 99
5.2.1 剪枝函数 99
5.2.2 双向广度搜索 99
5.3 实例分析 99
5.4 小结 121
第6章 图论算法 122
6.1 最短路径 122
6.1.1 Dijkstra算法 122
6.1.2 Floyd算法 123
6.1.3 Bellman-Ford算法 123
6.2 最小生成树 124
6.2.1 Kruskal算法 125
6.2.2 Prim算法 126
6.3 最大匹配——匈牙利算法 127
6.4 最优权匹配问题 128
6.4.1 理论基础 128
6.4.2 基本思想 129
6.4.3 样例代码 129
6.5 割点、割边以及连通分量 131
6.5.1 理论基础 131
6.5.2 求割点 132
6.5.3 求强连通分量 133
6.6 网络流 135
6.6.1 理论基础 135
6.6.2 最大流问题 135
6.6.3 最小费用最大流问题 137
6.7 实例分析 138
6.8 小结 166
第7章 动态规划算法 167
7.1 基本思想 169
7.2 基本概念 169
7.3 基本原理 170
7.3.1 最优化原理 170
7.3.2 无后效性 170
7.4 基本步骤 170
7.5 经典例子 171
7.6 实例分析 175
7.7 小结 200
第8章 计算几何基础 201
8.1 矢量 201
8.1.1 矢量的概念 201
8.1.2 矢量加减法 201
8.1.3 矢量叉积 201
8.1.4 矢量叉积的应用 201
8.2 包含关系 203
8.2.1 判断图形是否包含在矩形中 203
8.2.2 判断图形是否包含在多边形中 203
8.2.3 判断图形是否包含在圆中 206
8.3 凸包 206
8.3.1 凸包的概念 206
8.3.2 凸包的求法 206
8.4 实例分析 208
第9章 数论 233
9.1 基本数学算法 233
9.1.1 素数筛选 233
9.1.2 最大公约数 233
9.1.3 快速乘方 234
9.2 实例分析 234
附录A 综合训练题 264
A.1 Lucky Bird 264
A.2 Josephus'Problem 265
A.3 Counter Strike 267
A.4 Gauss Elimination 270
A.5 The Math Problem 271
A.6 Mobile Phones 272
A.7 Japan 275
A.8 骨灰级玩家考证篇 277
A.9 括号匹配 280
A.10 食物链 282