第1章 算法的概念 1
1.1 算法的概念和描述 1
1.1.1 算法的概念 1
1.1.2 算法的描述 3
1.2 算法的时间复杂度和空间复杂度 4
1.2.1 算法的评价 4
1.2.2 算法的时间复杂度 5
1.2.3 算法的空间复杂度 11
习题1 12
第2章 常用算法 18
2.1 递归法 18
2.1.1 递归的概念与基本思想 18
2.1.2 递归法的应用 19
2.2 分治法 23
2.2.1 分治的概念与基本思想 23
2.2.2 分治法的应用 27
2.3 贪心法 34
2.3.1 贪心的概念与基本思想 34
2.3.2 贪心法的应用 34
2.4 搜索法与回溯法 42
2.4.1 搜索与回溯的概念与基本思想 42
2.4.2 搜索法与回溯法的应用 43
习题2 48
第3章 动态规划 53
3.1 动态规划的基本思想与概念 53
3.1.1 动态规划的基本思想 53
3.1.2 动态规划的概念 55
3.1.3 动态规划的常用名词 56
3.1.4 动态规划算法的基本步骤 56
3.2 动态规划的简单应用 58
3.2.1 线性动态规划 58
3.2.2 背包动态规划 69
3.2.3 区间动态规划 79
3.2.4 网格动态规划 82
3.3 动态规划的深入研究 88
3.3.1 树形动态规划 88
3.3.2 状态压缩动态规划 95
3.3.3 基于连通性的状态压缩动态规划 104
3.3.4 数位计数类动态规划 112
3.4 动态规划的优化方法 115
3.4.1 减少状态总数 115
3.4.2 利用数据结构加速状态转移过程 120
3.4.3 四边形不等式优化 124
3.4.4 斜率优化 126
习题3 129
第4章 搜索算法中的优化技巧 138
4.1 搜索中的剪枝技巧 138
4.2 选择合适的搜索方向 158
4.3 A*算法 171
4.4 跳舞链 181
4.5 搜索还是动态规划 194
习题4 205
第5章 图上的算法 209
5.1 并查集 209
5.2 生成树 220
5.3 最短路 230
5.4 强连通分量 239
5.5 2-SAT 250
5.6 差分约束 261
5.7 二分图 266
5.8 网络流 279
5.8.1 网络流的概念 279
5.8.2 最大流的求解方法 280
习题5 299
参考文献 306