第1章 引论1
第2章 数学归纳法6
2.1 引言6
2.2 三个简单的例子7
2.3 平面内区域的计数8
2.4 简单的着色问题10
2.5 复杂一些的加法题10
2.6 一个简单的不等式11
2.7 欧拉公式12
2.8 图论中的一个问题13
2.9 格雷码14
2.10 在图上寻找无重边的路16
2.11 数学平均数和几何平均数定理17
2.12 循环不变量:将十进制数转换为二进制数19
2.13 常见的错误20
2.14 小结21
第3章 算法分析27
3.1 引言27
3.2 符号O28
3.3 时间与空间复杂度30
3.4 求和31
3.5 递推关系33
3.5.1 巧妙地猜测34
3.5.2 分治关系36
3.5.3 涉及全部历史的递推关系37
3.6 一些有用的证明论据39
3.7 小结40
第4章 数据结构简介44
4.1 引言44
4.2 基本数据结构44
4.2.1 元素44
4.2.2 数组45
4.2.3 记录45
4.2.4 链表46
4.3 树47
4.3.1 树的表示48
4.3.2 堆49
4.3.3 二叉搜索树51
4.3.4 AVL树54
4.4 散列56
4.5 合并?查找问题58
4.6 图60
4.7 小结61
第5章 基于归纳的算法设计66
5.1 引言66
5.2 多项式求值66
5.3 最大导出子图68
5.4 寻找一对一映射69
5.5 社会名流问题71
5.6 分治算法:轮廓问题73
5.7 在二叉树中计算平衡因子75
5.8 寻找最大连续子序列76
5.9 增强归纳假设77
5.10 动态规划:背包问题77
5.11 常见的错误80
5.12 小结80
第6章 序列和集合的算法85
6.1 引言85
6.2 二叉搜索的几种形式85
6.2.1 纯二叉搜索85
6.2.2 循环序列的二叉搜索86
6.2.3 二叉搜索特殊下标86
6.2.4 二叉搜索长度未知的序列88
6.2.5 重叠子序列问题88
6.2.6 解方程89
6.3 内插搜索89
6.4 排序90
6.4.1 桶排序和基数排序90
6.4.2 插入排序和选择排序92
6.4.3 归并排序93
6.4.4 快速排序93
6.4.5 堆排序98
6.4.6 排序问题的下界100
6.5 顺序统计102
6.5.1 最大数和最小数102
6.5.2 查找第k小的数102
6.6 数据压缩103
6.7 串匹配105
6.8 序列比较110
6.9 概率算法112
6.9.1 随机数113
6.9.2 着色问题114
6.9.3 将拉斯维加斯算法变换成确定性算法114
6.10 查找众数116
6.11 三个展现有趣证明方法的问题118
6.11.1 最长递增序列118
6.11.2 查找集合中两个最大的元素119
6.11.3 计算多重集合的模121
6.12 小结122
第7章 图算法130
7.1 引言130
7.2 欧拉图131
7.3 图的遍历133
7.3.1 深度优先搜索133
7.3.2 广度优先搜索139
7.4 拓扑排序140
7.5 单源最短路径142
7.6 最小代价生成树146
7.7 全部最短路径150
7.8 传递闭包151
7.9 图的分解153
7.9.1 双连通分支153
7.9.2 强连通分支159
7.9.3 利用图分解的例子164
7.10 匹配166
7.10.1 非常稠密图中的完美匹配166
7.10.2 偶图匹配167
7.11 网络流量169
7.12 哈密尔顿旅行173
7.12.1 反向归纳173
7.12.2 在非常稠密图中找哈密尔顿回路173
7.13 小结174
第8章 几何算法188
8.1 引言188
8.2 判定点是否在多边形内部189
8.3 构造简单多边形191
8.4 凸包193
8.4.1 直接方法193
8.4.2 礼品包裹算法194
8.4.3 Graham扫描算法195
8.5 最近点对197
8.6 水平线段和竖直线段的交点200
8.7 小结203
第9章 代数和数值算法207
9.1 引言207
9.2 求幂运算207
9.3 欧几里得算法210
9.4 多项式乘法211
9.5 矩阵乘法212
9.5.1 Winograd算法212
9.5.2 Strassen算法213
9.5.3 布尔矩阵215
9.6 快速傅里叶变换218
9.7 小结224
第10章 归约228
10.1 引言228
10.2 归约的例子229
10.2.1 简单字符串匹配问题229
10.2.2 特殊代表集229
10.2.3 关于序列比较的归约230
10.2.4 在无向图中寻找三角形231
10.3 有关线性规划的归约232
10.3.1 概述与定义232
10.3.2 归约到线性规划的例子233
10.4 下界的归约235
10.4.1 寻找简单多边形算法复杂度的下界235
10.4.2 关于矩阵的简单归约236
10.5 常见的错误237
10.6 小结238
第11章 NP完全问题242
11.1 引言242
11.2 多项式时间归约242
11.3 非确定性和Cook定理244
11.4 NP完全性的证明例子246
11.4.1 顶点覆盖问题246
11.4.2 支配集问题247
11.4.3 3SAT问题248
11.4.4 团问题249
11.4.5 3着色问题250
11.4.6 一般经验251
11.4.7 更多的NP完全问题252
11.5 处理NP完全问题的技术253
11.5.1 回溯法和分枝限界法254
11.5.2 确保性能的近似算法257
11.6 小结261
第12章 并行算法266
12.1 引言266
12.2 并行计算模型267
12.3 共享存储器算法268
12.3.1 并行加268
12.3.2 寻找最大数的算法269
12.3.3 并行前缀问题271
12.3.4 在链表中查寻秩273
12.3.5 欧拉遍历技术274
12.4 互连网络上的算法275
12.4.1 阵列上的排序276
12.4.2 排序网络279
12.4.3 在树中查找第k个最小元素280
12.4.4 网孔上的矩阵乘法283
12.4.5 超立方体中的路由284
12.5 脉动计算286
12.5.1 矩阵与向量相乘286
12.5.2 卷积问题287
12.5.3 序列的比较288
12.6 小结290
部分习题答案296
参考文献317
^ 收 起