第1章 算法概述 1
1.1 算法与程序 1
1.2 算法复杂性分析 1
1.3 NP完全性理论 4
算法分析题1 7
算法实现题1 8
第2章 递归与分治策略 11
2.1 递归的概念 11
2.2 分治法的基本思想 16
2.3 二分搜索技术 17
2.4 大整数的乘法 18
2.5 Strassen矩阵乘法 19
2.6 棋盘覆盖 20
2.7 合并排序 22
2.8 快速排序 24
2.9 线性时间选择 26
2.10 最接近点对问题 29
2.11 循环赛日程表 35
算法分析题2 36
算法实现题2 39
第3章 动态规划 44
3.1 矩阵连乘问题 45
3.2 动态规划算法的基本要素 49
3.3 最长公共子序列 52
3.4 最大子段和 54
3.5 凸多边形最优三角剖分 59
3.6 多边形游戏 62
3.7 图像压缩 65
3.8 电路布线 67
3.9 流水作业调度 69
3.10 0-1背包问题 71
3.11 最优二叉搜索树 76
算法分析题3 78
算法实现题3 79
第4章 贪心算法 90
4.1 活动安排问题 90
4.2 贪心算法的基本要素 93
4.3 最优装载 95
4.4 哈夫曼编码 96
4.5 单源最短路径 100
4.6 最小生成树 103
4.7 多机调度问题 106
算法分析题4 108
算法实现题4 108
第5章 回溯法 114
5.1 回溯法的算法框架 114
5.2 装载问题 119
5.3 批处理作业调度 125
5.4 符号三角形问题 127
5.5 n后问题 129
5.6 0-1背包问题 132
5.7 最大团问题 135
5.8 图的m着色问题 137
5.9 旅行售货员问题 139
5.10 圆排列问题 141
5.11 电路板排列问题 143
5.12 连续邮资问题 146
5.13 回溯法的效率分析 148
算法分析题5 151
算法实现题5 151
第6章 分支限界法 161
6.1 分支限界法的基本思想 161
6.2 单源最短路径问题 163
6.3 装载问题 166
6.4 布线问题 173
6.5 0-1背包问题 176
6.6 最大团问题 180
6.7 旅行售货员问题 182
6.8 电路板排列问题 186
6.9 批处理作业调度 188
算法分析题6 193
算法实现题6 193
第7章 随机化算法 202
7.1 随机数 203
7.2 数值随机化算法 205
7.2.1 用随机投点法计算π值 205
7.2.2 计算定积分 205
7.2.3 解非线性方程组 207
7.3 舍伍德(Sherwood)算法 209
7.3.1 线性时间选择算法 209
7.3.2 搜索有序表 211
7.3.3 跳跃表 214
7.4 拉斯维加斯(Las Vegas)算法 221
7.4.1 n后问题 221
7.4.2 整数因子分解 225
7.5 蒙特卡罗(Monte Carlo)算法 226
7.5.1 蒙特卡罗算法的基本思想 227
7.5.2 主元素问题 228
7.5.3 素数测试 230
算法分析题7 232
算法实现题7 235
第8章 线性规划与网络流 238
8.1 线性规划问题和单纯形算法 238
8.1.1 线性规划问题及其表示 238
8.1.2 线性规划基本定理 239
8.1.3 约束标准型线性规划问题的单纯形算法 239
8.1.4 将一般问题转化为约束标准型 242
8.1.5 一般线性规划问题的两阶段单纯形算法 243
8.1.6 单纯形算法的描述和实现 243
8.1.7 退化情形的处理 249
8.1.8 应用举例 249
8.2 最大网络流问题 251
8.2.1 网络与流 251
8.2.2 增广路算法 256
8.2.3 预流推进算法 259
8.2.4 最大流问题的变换与应用 263
8.3 最小费用流问题 269
8.3.1 最小费用流 269
8.3.2 消圈算法 270
8.3.3 最小费用路算法 272
8.3.4 网络单纯形算法 274
8.3.5 最小费用流问题的变换与应用 280
算法分析题8 287
算法实现题8 287
附录A C++概要 299
1.变量、指针和引用 299
2.函数与参数传递 299
3.C++的类 300
4.类的对象 301
5.构造函数与析构函数 301
6.运算符重载 301
7.友元函数 302
8.内联函数 302
9.结构 302
10.联合 302
11.异常 302
12.模板 303
13.动态存储分配 304
参考文献 306