第1章 什么是算法以及为什么应该关注算法 1
1.1 正确性 2
1.2 资源利用 3
1.3 针对非计算机专业人士的计算机算法 5
1.4 针对计算机专业人士的计算机算法 6
1.5 拓展阅读 7
第2章 如何描述和评估计算机算法 9
2.1 如何描述计算机算法 9
2.2 如何描述运行时间 16
2.3 循环不变式 19
2.4 递归 21
2.5 拓展阅读 23
第3章 排序算法和查找算法 24
3.1 二分查找 26
3.2 选择排序 31
3.3 插入排序 34
3.4 归并排序 38
3.5 快速排序 47
3.6 小结 55
3.7 拓展阅读 57
第4章 排序算法的下界和如何超越下界 58
4.1 基于排序的规则 58
4.2 基于比较排序的下界 59
4.3 使用计数排序超越下界 60
4.4 基数排序 66
4.5 拓展阅读 68
第5章 有向无环图 69
5.1 有向无环图 72
5.2 拓扑排序 72
5.3 如何表示有向图 76
5.4 拓扑排序的运行时间 77
5.5 PERT图表中的关键路径 78
5.6 有向无环图中的最短路径 82
5.7 拓展阅读 86
第6章 最短路径 87
6.1 Dijkstra算法 89
6.2 Bellman-Ford算法 98
6.3 Floyd-Warshall算法 103
6.4 拓展阅读 112
第7章 字符串算法 114
7.1 最长公共子序列 114
7.2 字符串转换 120
7.3 字符串匹配 128
7.4 拓展阅读 135
第8章 密码学基础 136
8.1 简单替代密码 137
8.2 对称-密钥加密 138
8.3 公钥加密 142
8.4 RSA加密系统 144
8.5 混合加密系统 153
8.6 计算随机数 153
8.7 拓展阅读 154
第9章 数据压缩 156
9.1 哈夫曼编码 158
9.2 传真机 165
9.3 LZW压缩 166
9.4 拓展阅读 176
第10章 难?问题 177
10.1 棕卡车问题 177
10.2 P、NP和NP-完全类 181
10.3 可判定问题和归约 183
10.4 主问题 186
10.5 NP-完全问题例析 188
10.6 总体策略 203
10.7 前景 206
10.8 不可判定问题 208
10.9 小结 210
10.10 拓展阅读 211
参考文献 212
索引 214