第一部分 基础 3
第1章 开篇 3
1.1一次友好的对话 3
1.2准确的问题描述 4
1.3程序设计 4
1.4实现概要 6
1.5原理 7
1.6习题 8
1.7深入阅读 9
第2章 啊哈!算法 11
2.1三个问题 11
2.2无处不在的二分搜索 12
2.3基本操作的威力 14
2.4排序 16
2.5原理 17
2.6习题 18
2.7深入阅读 20
2.8变位词程序的实现(边栏) 20
第3章 数据决定程序结构 23
3.1一个调查程序 23
3.2格式信函编程 26
3.3一组示例 28
3.4结构化数据 29
3.5用于特殊数据的强大工具 30
3.6原理 32
3.7习题 33
3.8深入阅读 34
第4章 编写正确的程序 37
4.1二分搜索的挑战 37
4.2编写程序 38
4.3理解程序 40
4.4原理 43
4.5程序验证的角色 44
4.6习题 45
4.7深入阅读 48
第5章 编程小事 49
5.1从伪代码到C程序 49
5.2测试工具 51
5.3断言的艺术 53
5.4自动测试 55
5.5计时 56
5.6完整的程序 58
5.7原理 59
5.8习题 59
5.9深入阅读 61
5.10调试(边栏) 61
第二部分 性能 65
第6章 程序性能分析 65
6.1实例研究 65
6.2设计层面 67
6.3原理 69
6.4习题 69
6.5深入阅读 70
第7章 粗略估算 71
7.1基本技巧 72
7.2性能估计 74
7.3安全系数 76
7.4 Little定律 78
7.5原理 79
7.6习题 79
7.7深入阅读 80
7.8日常生活中的速算(边栏) 81
第8章 算法设计技术 83
8.1问题及简单算法 83
8.2两个平方算法 84
8.3分治算法 86
8.4扫描算法 87
8.5实际运行时间 88
8.6原理 90
8.7习题 91
8.8深入阅读 92
第9章 代码调优 95
9.1典型的故事 95
9.2急救方案集锦 96
9.3大手术——二分搜索 101
9.4原理 105
9.5习题 106
9.6深入阅读 108
第10章 节省空间 109
10.1关键在于简单 109
10.2示例问题 110
10.3数据空间技术 113
10.4代码空间技术 116
10.5原理 118
10.6习题 119
10.7深入阅读 120
10.8 巨大的节省(边栏) 121
第三部分 应用 125
第11章 排序 125
11.1插入排序 125
11.2一种简单的快速排序 127
11.3更好的几种快速排序 130
11.4原理 133
11.5习题 133
11.6深入阅读 135
第12章 取样问题 137
12.1问题 137
12.2一种解决方案 138
12.3设计空间 139
12.4原理 142
12.5习题 143
12.6深入阅读 144
第13章 搜索 145
13.1接口 145
13.2线性结构 147
13.3二分搜索树 151
13.4用于整数的结构 153
13.5原理 155
13.6习题 156
13.7深入阅读 157
13.8一个实际搜索问题(边栏) 157
第14章 堆 161
14.1数据结构 161
14.2两个关键函数 163
14.3优先级队列 166
14.4一种排序算法 169
14.5原理 171
14.6习题 172
14.7深入阅读 174
第15章 字符串 175
15.1单词 175
15.2短语 179
15.3生成文本 182
15.4原理 187
15.5习题 188
15.6深入阅读 189
第1版跋 191
第2版跋 195
附录A算法分类 197
附录B估算测试 203
附录C时空开销模型 205
附录D代码调优法则 211
附录E用于搜索的C++类 217
部分习题提示 223
部分习题答案 229
索引 259