书海网短评:
适读人群:本书概念清楚,逻辑性强,内容新颖,适合作为大专院校计算机软件与计算机应用等相关专业的教材或参考书,也适合计算机工程技术人员参考。 本版特色如下: *书中的阐述和算法均用C++新标准C++11的代码实现
第1章程序设计:综述1
1.1《数据结构与算法分析:C++语言描述(第四版)》讨论的内容1
1.2数学知识复习2
1.2.1指数(exponent)2
1.2.2对数(logarithm)2
1.2.3级数(series)3
1.2.4模运算(modulararithmetic)4
1.2.5证明方法5
1.3递归简论7
1.4C++类10
1.4.1基本的class语法10
1.4.2构造函数的附加语法和访问
函数11
1.4.3接口与实现的分离13
1.4.4vector类和string类16
1.5C++细节17
1.5.1指针(pointer)18
1.5.2左值、右值和引用19
1.5.3参数传递21
1.5.4返回值传递23
1.5.5std::swap和std::move25
1.5.6五大函数:析构函数,拷贝构造
函数,移动构造函数,拷贝赋值
operator=,移动赋值operator=26
1.5.7C风格数组和字符串30
1.6模板31
1.6.1函数模板31
1.6.2类模板32
1.6.3Object、Comparable和一个
例子33
1.6.4函数对象34
1.6.5类模板的分离式编译37
1.7使用矩阵37
1.7.1数据成员、构造函数和基本访问
函数38
1.7.2operator[]38
1.7.3五大函数39
小结39
练习39
参考文献41
第2章算法分析42
2.1数学基础42
2.2模型44
2.3要分析的问题44
2.4运行时间计算47
2.4.1一个简单的例子47
2.4.2一般法则47
2.4.3最大子序列和问题的求解49
2.4.4运行时间中的对数54
2.4.5最坏情形分析的局限性57
小结58
练习58
参考文献63
第3章表、栈和队列64
3.1抽象数据类型(ADT)64
3.2表ADT64
3.2.1表的简单数组实现65
3.2.2简单链表65
3.3STL中的vector和list67
3.3.1迭代器68
3.3.2例子:对表使用erase69
3.3.3const_iterators70
3.4vector的实现72
3.5list的实现76
3.6栈ADT86
3.6.1栈模型86
3.6.2栈的实现86
3.6.3应用87
3.7队列ADT93
3.7.1队列模型93
3.7.2队列的数组实现93
3.7.3队列的应用95
小结96
练习96
第4章树100
4.1预备知识100
4.1.1树的实现101
4.1.2树的遍历及应用102
4.2二叉树105
4.2.1实现105
4.2.2一个例子――表达式树105
4.3查找树ADT――二叉查找树108
4.3.1contains110
4.3.2findMin和findMax111
4.3.3insert112
4.3.4remove113
4.3.5析构函数和拷贝构造函数115
4.3.6平均情况分析115
4.4AVL树118
4.4.1单旋转119
4.4.2双旋转121
4.5伸展树128
4.5.1一个简单的想法(不能直接
使用)128
4.5.2展开130
4.6树的遍历134
4.7B树135
4.8标准库中的集合与映射140
4.8.1集合(set)140
4.8.2映射(map)141
4.8.3set和map的实现142
4.8.4使用多个映射(map)的例142
小结147
练习147
参考文献153
第5章散列155
5.1一般想法155
5.2散列函数155
5.3分离链接法157
5.4不用链表的散列表161
5.4.1线性探测法161
5.4.2平方探测法163
5.4.3双散列166
5.5再散列167
5.6标准库中的散列表169
5.7以最坏情形O(1)访问的散列表170
5.7.1完美散列170
5.7.2杜鹃散列172
5.7.3跳房子散列181
5.8通用散列184
5.9可扩散列186
小结188
练习189
参考文献193
第6章优先队列(堆)196
6.1模型196
6.2一些简单的实现197
6.3二叉堆197
6.3.1结构性质197
6.3.2堆序性质198
6.3.3基本的堆操作199
6.3.4其他的堆操作203
6.4优先队列的应用206
6.4.1选择问题206
6.4.2事件模拟207
6.5d堆208
6.6左式堆209
6.6.1左式堆的性质209
6.6.2左式堆操作210
6.7斜堆215
6.8二项队列216
6.8.1二项队列构建216
6.8.2二项队列操作217
6.8.3二项队列的实现219
6.9标准库中的优先队列224
小结225
练习225
参考文献229
第7章排序232
7.1预备知识232
7.2插入排序233
7.2.1算法233
7.2.2插入排序的STL实现233
7.2.3插入排序的分析235
7.3一些简单排序算法的下界235
7.4希尔排序236
7.4.1希尔排序的最坏情形分析237
7.5堆排序239
7.5.1堆排序的分析241
7.6归并排序242
7.6.1归并排序的分析245
7.7快速排序247
7.7.1选取枢纽元249
7.7.2分割策略250
7.7.3小数组252
7.7.4实际的快速排序例程252
7.7.5快速排序的分析254
7.7.6选择问题的线性期望时间
算法256
7.8排序算法的一般下界258
7.8.1决策树258
7.9选择问题的决策树下界260
7.10对手下界(adversarylower
bounds)262
7.11线性时间排序:桶式排序和
基数排序265
7.12外部排序269
7.12.1为什么需要一些新的算法269
7.12.2外部排序模型269
7.12.3简单算法269
7.12.4多路合并270
7.12.5多相合并271
7.12.6替换选择272
小结273
练习题273
参考文献278
第8章不相交集类281
8.1等价关系281
8.2动态等价性问题281
8.3基本数据结构283
8.4灵巧求并算法286
8.5路径压缩288
8.6按秩求并和路径压缩的最坏
情形289
8.6.1缓慢增长的函数289
8.6.2通过递归分解进行的分析290
8.6.3一个O(Mlog*N)界295
8.6.4一个O(Mα(M,N))界296
8.7一个应用297
小结299
练习299
参考文献301
第9章图论算法303
9.1若干定义303
9.1.1图的表示304
9.2拓扑排序305
9.3最短路径算法308
9.3.1无权最短路径309
9.3.2Dijkstra算法312
9.3.3具有负边值的图317
9.3.4无圈图318
9.3.5所有顶点对间的最短路径320
9.3.6最短路径的例320
9.4网络流问题322
9.4.1一个简单的最大流算法323
9.5最小生成树326
9.5.1Prim算法327
9.5.2Kruskal算法329
9.6深度优先搜索的应用330
9.6.1无向图331
9.6.2双连通性332
9.6.3欧拉回路335
9.6.4有向图338
9.6.5查找强分支339
9.7NP完全性介绍340
9.7.1难与易341
9.7.2NP类341
9.7.3NP完全问题342
小结344
练习344
参考文献350
第10章算法设计技巧353
10.1贪婪算法353
10.1.1一个简单的调度问题354
10.1.2哈夫曼编码355
10.1.3近似装箱问题359
10.2分治算法366
10.2.1分治算法的运行时间367
10.2.2最近点问题369
10.2.3选择问题371
10.2.4一些算术问题的理论改进374
10.3动态规划377
10.3.1用表代替递归377
10.3.2矩阵乘法的顺序安排379
10.3.3最优二叉查找树382
10.3.4所有点对最短路径384
10.4随机化算法386
10.4.1随机数发生器387
10.4.2跳跃表392
10.4.3素性测试393
10.5回溯算法396
10.5.1收费公路重建问题396
10.5.2博弈400
小结405
练习406
参考文献413
第11章摊还分析418
11.1一个无关的智力问题418
11.2二项队列419
11.3斜堆423
11.4斐波那契堆425
11.4.1切除左式堆中的节点425
11.4.2二项队列的懒惰合并427
11.4.3斐波那契堆操作429
11.4.4时间界的证明430
11.5伸展树432
小结436
练习436
参考文献437
第12章高级数据结构及其实现439
12.1自顶向下伸展树439
12.2红黑树445
12.2.1自底向上的插入446
12.2.2自顶向下红黑树447
12.2.3自顶向下删除452
12.3treap树453
12.4后缀数组和后缀树456
12.4.1后缀数组456
12.4.2后缀树458
12.4.3后缀数组和后缀树的线性
时间构建461
12.5k-d树471
12.6配对堆474
小结479
练习479
参考文献483
附录A类模板的分离式编译486
索引489









