第1章 算法及基础知识 1
1.1 算法的基本概念 1
1.1.1 学习算法的重要性 1
1.1.2 算法的定义及特性 2
1.1.3 算法的描述方式 3
1.1.4 算法与程序的区别 4
1.2 算法设计的一般过程 5
1.3 算法分析 6
1.3.1 算法分析的概念 6
1.3.2 时间复杂性 6
1.3.3 空间复杂性 7
1.3.4 渐进复杂性态 7
1.3.5 算法复杂性的权衡考虑 13
1.4 递归 13
1.4.1 认知递归 13
1.4.2 n的阶乘 14
1.4.3 排列问题 14
1.4.4 递归算法的复杂性分析 16
1.5 基本的数据结构 17
1.5.1 顺序表与链表 17
1.5.2 栈与队列 19
1.5.3 树与图 20
1.5.4 集合 25
1.6 常用数学公式 27
1.6.1 对数公式 27
1.6.2 组合公式 27
1.6.3 求和公式 27
1.6.4 向下取整和向上取整公式 28
阅读材料1——算法界十大名师简介 28
习题1 33
第2章 贪心法 34
2.1 概述 34
2.1.1 贪心法的基本思想 34
2.1.2 贪心法的基本要素 35
2.1.3 贪心法的解题步骤及算法设计模式 36
2.2 会场安排问题 36
2.3 单源最短路径问题 39
2.4 哈夫曼编码 43
2.5 最小生成树 49
2.5.1 Prim算法 50
2.5.2 Kruskal算法 53
2.5.3 两种算法的比较 56
阅读材料2——遗传算法 56
习题2 60
第3章 分治法 62
3.1 概述 62
3.1.1 分治法的基本思想 62
3.1.2 分治法的求解步骤 63
3.2 二分查找 63
3.3 循环赛日程表 66
3.4 合并排序 69
3.5 快速排序 72
阅读材料3——禁忌搜索算法 76
习题3 80
第4章 动态规划 81
4.1 概述 81
4.1.1 动态规划的基本思想 82
4.1.2 动态规划的求解步骤 83
4.1.3 动态规划的基本要素 83
4.2 矩阵连乘问题 84
4.3 凸多边形最优三角剖分 89
4.4 最长公共子序列问题 92
4.5 加工顺序问题 96
4.6 0-1背包问题 99
4.7 最优二叉查找树 108
阅读材料4——模拟退火算法 118
习题4 121
第5章 搜索法 123
5.1 穷举搜索 123
5.2 深度优先搜索 124
5.3 回溯法 126
5.3.1 回溯法的算法框架及思想 126
5.3.2 子集树 133
5.3.3 排列树 146
5.3.4 满m叉树 157
5.4 宽度优先搜索 169
5.5 分支限界法 171
5.5.1 分支限界法的基本思想 171
5.5.2 0-1背包问题 171
5.5.3 旅行商问题 179
5.5.4 布线问题 184
5.5.5 分支限界法与回溯法的比较 187
阅读材料5——蚁群算法 188
习题5 192
第6章 随机化算法 194
6.1 概述 194
6.1.1 随机化算法的类型及特点 194
6.1.2 随机数发生器 195
6.2 数值随机化算法 197
6.2.1 计算π的值 197
6.2.2 计算定积分 197
6.3 蒙特卡罗算法 198
6.3.1 主元素问题 198
6.3.2 素数测试 199
6.4 拉斯维加斯算法 203
6.4.1 整数因子分解 203
6.4.2 n皇后问题 205
6.5 舍伍德算法 207
6.5.1 随机快速排序 207
6.5.2 线性时间选择 207
阅读材料6——粒子群优化算法 208
习题6 211
第7章 线性规划问题与网络流 213
7.1 概述 213
7.1.1 一般线性规划问题的描述 213
7.1.2 标准型线性规划问题的描述 214
7.1.3 标准型线性规划问题的单纯形算法 216
7.2 最大网络流 224
7.2.1 基本概念 224
7.2.2 增广路算法 226
7.2.3 最大网络流的变换与应用 230
7.3 最小费用最大流 234
7.3.1 基本概念 234
7.3.2 消圈算法 235
7.3.3 最小费用最大流的变换与应用 243
阅读材料7——捕食搜索算法 243
习题7 246
第8章 数论算法及计算几何算法 248
8.1 最大公约数 248
8.1.1 欧几里得算法 248
8.1.2 Stein算法 250
8.2 同余方程 251
8.3 同余方程组 254
8.4 线段相交 256
8.5 凸包问题 259
8.5.1 凸包问题的穷举搜索法 260
8.5.2 凸包问题的分治法 261
8.6 最接近点对问题 263
8.6.1 最接近点对问题的穷举搜索法 264
8.6.2 最接近点对问题的分治法 264
阅读材料8——动态进化算法 271
习题8 274
第9章 NP完全理论 275
9.1 易解问题和难解问题 275
9.2 P类和NP类问题 276
9.2.1 P类问题 277
9.2.2 NP类问题 277
9.2.3 P类问题和NP类问题的关系 278
9.3 NP完全问题 279
9.3.1 多项式变换技术 279
9.3.2 典型的NP完全问题 279
9.4 NP完全问题的近似算法 280
9.4.1 顶点覆盖问题 282
9.4.2 装箱问题 282
9.4.3 旅行商问题TSP 285
9.4.4 集合覆盖问题 285
阅读材料9——DNA计算 286
习题9 290
附录A 习题解析 291
第1章 291
第2章 292
第3章 295
第4章 296
第5章 299
第6章 303
第7章 304
第8章 309
第9章 309
参考文献 312