第1章 计算模型 1
1.1 算法和复杂度 1
1.2 随机存取计算机 3
1.3 RAM程序的计算复杂度 7
1.4 存储程序模型 8
1.5 RAM的抽象 11
1.6 一种基本的计算模型:图灵机 15
1.7 图灵机模型和RAM模型的关系 19
1.8 简化ALGOL——一种高级语言 20
第2章 有效算法的设计 26
2.1 数据结构:表、队列和堆栈 26
2.2 集合的表示 28
2.3 图 29
2.4 树 30
2.5 递归 33
2.6 分治法 35
2.7 平衡 38
2.8 动态规划 39
2.9 后记 41
第3章 排序和顺序统计 46
3.1 排序问题 46
3.2 基数排序 47
3.3 比较排序 52
3.4 堆排序——O(n log n)的比较排序算法 52
3.5 快速排序——期望时间为O(n log n)的排序算法 55
3.6 顺序统计学 58
3.7 顺序统计的期望时间 60
第4章 集合操作问题的数据结构 65
4.1 集合的基本操作 65
4.2 散列法 67
4.3 二分搜索 68
4.4 二叉查找树 69
4.5 最优二叉查找树 71
4.6 简单的不相交集合合并算法 74
4.7 UNION-FIND问题的树结构 77
4.8 UNION-FIND算法的应用和扩展 83
4.9 平衡树方案 87
4.10 字典和优先队列 88
4.11 可合并堆 91
4.12 可连接队列 93
4.13 划分 94
4.14 本章小结 98
第5章 图算法 103
5.1 最小代价生成树 103
5.2 深度优先搜索 105
5.3 双连通性 107
5.4 有向图的深度优先搜索 112
5.5 强连通性 113
5.6 路径查找问题 117
5.7 传递闭包算法 119
5.8 最短路径算法 120
5.9 路径问题与矩阵乘法 121
5.10 单源问题 124
5.11 有向无环图的支配集:概念整合 126
第6章 矩阵乘法及相关操作 135
6.1 基础知识 135
6.2 Strassen矩阵乘法算法 137
6.3 矩阵求逆 139
6.4 矩阵的LUP分解 140
6.5 LUP分解的应用 145
6.6 布尔矩阵的乘法 146
第7章 快速傅里叶变换及其应用 153
7.1 离散傅里叶变换及其逆变换 153
7.2 快速傅里叶变换算法 156
7.3 使用位操作的FFT 161
7.4 多项式乘积 164
7.5 Sch?nhage-Strassen整数相乘算法 165
第8章 整数与多项式计算 170
8.1 整数和多项式的相似性 170
8.2 整数的乘法和除法 171
8.3 多项式的乘法和除法 175
8.4 模算术 177
8.5 多项式模算术和多项式计值 179
8.6 中国余数 180
8.7 中国余数和多项式的插值 183
8.8 最大公因子和欧几里得算法 184
8.9 多项式GCD的渐近快速算法 186
8.10 整数的GCD 190
8.11 再论中国余数 191
8.12 稀疏多项式 192
第9章 模式匹配算法 196
9.1 有穷自动机和正则表达式 196
9.2 正则表达式的模式识别 201
9.3 子串识别 203
9.4 双向确定型下推自动机 207
9.5 位置树和子串标识符 215
第10章 NP完全问题 226
10.1 非确定型图灵机问题 226
10.2 P类和NP类 231
10.3 语言和问题 233
10.4 可满足性问题的NP完全性 234
10.5 其他NP完全问题 239
10.6 多项式空间界问题 245
第11章 一些可证难的问题 252
11.1 复杂度层次 252
11.2 确定型图灵机的空间层次 252
11.3 一个需要指数时间和空间的问题 254
11.4 一个非基本的问题 260
第12章 算术运算的下界 265
12.1 域 265
12.2 再论直线状代码 266
12.3 问题的矩阵表述 267
12.4 面向行的矩阵乘法的下界 267
12.5 面向列的矩阵乘法的下界 269
12.6 面向行和列的矩阵乘法的下界 272
12.7 预处理 273
附录 算法的C/C++代码 280
参考文献 407