本书是数据结构和算法分析领域的教材。全书以 C 作为具体的实现语言,介绍了表、栈、队列、树、哈希表、优先队列、排序、不相交集算法、图论算法、算法分析、算法设计、摊还分析、查找树算法、后缀数组、后缀树、k-d 树、配对堆等内容。本书把算法分析和 C 程序的开发有机结合起来,深入剖析每种算法,内容缜密严谨,还详细讲解了精心构建程序的方法。
本书可作为高等院校计算机相关专业的教学用书或参考用书,也可供计算机领域的工程技术人员参考
關於作者:
Mark Allen Weiss,佛罗里达国际大学计算与信息科学学院教授、副院长,本科教育主任和研究生教育主任。他于1987年获得普林斯顿大学计算机科学博士学位,师从Bob Sedgewick。他曾经担任全美AP(Advanced Placement)考试计算机学科委员会的主席(2000-2004)。Weiss教授在数据结构和算法分析方面卓有建树,他的数据结构和算法分析的书籍,受到广泛好评.已被世界500余所大学用作教材。
目錄:
Chapter 1 Programming: A General Overview / 第 1章 程序设计:概述 1
1.1 What’s This Book About / 本书讨论的内容 1
1.2 Mathematics Review / 数学知识复习 2
1.2.1 Exponents / 指数 3
1.2.2 Logarithms / 对数 3
1.2.3 Series / 级数 4
1.2.4 Modular Arithmetic / 模运算 5
1.2.5 The P Word / 证明方法 6
1.3 A Brief Introduction to Recursion / 递归简论 8
1.4 C Classes / C类 12
1.4.1 Basic class Syntax / 基本的class语法 12
1.4.2 Extra Constructor Syntax and Accessors / 构造函数的附加语法和访问函数 13
1.4.3 Separation of Interface and Implementation / 接口与实现的分离 16
1.4.4 vector and string / vector类和string类 19
1.5 C Details / C细节 21
1.5.1 Pointers / 指针 21
1.5.2 Lvalues, Rvalues, and References / 左值、右值和引用 23
1.5.3 Parameter Passing / 参数传递 25
1.5.4 Return Passing / 返回值传递 27
1.5.5 std::swap and std::move / std::swap和std::move 29
1.5.6 The Big-Five: Destructor, Copy Constructor, Move Constructor, Copy Assignment operator=, Move Assignment operator= / 五大函数:析构函数、拷贝构造函数、移动构造函数、拷贝赋值operator=和移动赋值operator= 30
1.5.7 C-style Arrays and Strings / C风格数组和字符串 35
1.6 Templates / 模板 36
1.6.1 Function Templates / 函数模板 37
1.6.2 Class Templates / 类模板 38
1.6.3 Object, Comparable, and an Example / Object、Comparable和一个例子 39
1.6.4 Function Objects / 函数对象 41
1.6.5 Separate Compilation of Class Templates / 类模板的分离式编译 44
1.7 Using Matrices / 使用矩阵 44
1.7.1 The Data Members, Constructor, and Basic Accessors / 数据成员、构造函数和基本访问函数 44
1.7.2 operator[] / operator[] 45
1.7.3 Big-Five / 五大函数 46
Summary / 小结 46
Exercises / 练习 46
References / 参考文献 48
Chapter 2 Algorithm Analysis / 第 2章 算法分析 51
2.1 Mathematical Background / 数学基础 51
2.2 Model / 模型 54
2.3 What to Analyze / 要分析的问题 54
2.4 Running-Time Calculations / 运行时间计算 57
2.4.1 A Simple Example / 一个简单的例子 58
2.4.2 General Rules / 一般法则 58
2.4.3 Solutions for the Maximum Subsequence Sum Problem / 子序列和问题的求解 60
2.4.4 Logarithms in the Running Time / 运行时间中的对数 66
2.4.5 Limitations of Worst-Case Analysis / 坏情形分析的局限性 70
Summary / 小结 70
Exercises / 练习 71
References / 参考文献
76
Chapter 3 Lists, Stacks, and Queues / 第3章 表、栈和队列77
3.1 Abstract Data Types (ADTs) / 抽象数据类型 77
3.2 The List ADT / 表的抽象数据类型 78
3.2.1 Simple Array Implementation of Lists / 表的简单数组实现 78
3.2.2 Simple Linked Lists / 简单链表 79
3.3 vector and list in the STL / STL中的vector和list 80
3.3.1 Iterators / 迭代器 82
3.3.2 Example: Using erase on a List / 例子:对表使用erase 83
3.3.3 const_iterators / const_iterators 84
3.4 Implementation of vector / vector的实现 86
3.5 Implementation of list / list的实现 91
3.6 The Stack ADT / 栈的抽象数据类型 103
3.6.1 Stack Model / 栈模型 103
3.6.2 Implementation of Stacks / 栈的实现 104
3.6.3 Applications / 应用 104
3.7 The Queue ADT / 队列的抽象数据类型 112
3.7.1 Queue Model / 队列模型 113
3.7.2 Array Implementation of Queues / 队列的数组实现 113
3.7.3 Applications of Queues / 队列的应用 115
Summary / 小结 116
Exercises / 练习 116
Chapter 4 Trees / 第4章 树 121
4.1 Preliminaries / 预备知识 121
4.1.1 Implementation of Trees / 树的实现 122
4.1.2 Tree Traversals with an Application / 树的遍历及应用 123
4.2 Binary Trees / 二叉树 126
4.2.1 Implementation / 实现 128
4.2.2 An Example: Expression Trees / 一个例子——表达式树 128
4.3 The Search Tree ADT—Binary Search Trees / 查找树的抽象数据类型——二叉查找树 132
4.3.1 contains / contains 134
4.3.2 findMin and findMax / findMin和findMax 135
4.3.3 insert / insert 136
4.3.4 remove / remove 139
4.3.5 Destructor and Copy Constructor / 析构函数和拷贝构造函数 141
4.3.6 Average-Case Analysis / 平均情况分析 141
4.4 AVL Trees / AVL树 144
4.4.1 Single Rotation / 单旋转 147
4.4.2 Double Rotation / 双旋转 149
4.5 Splay Trees / 伸展树 158
4.5.1 A Simple Idea (That Does Not Work) / 一个简单的想法(不能直接使用) 158
4.5.2 Splaying / 展开 160
4.6 Tree Traversals (Revisited) / 树的遍历(再次讨论) 166
4.7 B-Trees / B树 168
4.8 Sets and Maps in the Standard Library / 标准库中的集合与映射 173
4.8.1 Sets / 集合 173
4.8.2 Maps / 映射 174
4.8.3 Implementation of set and map / set和map的实现 175
4.8.4 An Example That Uses Several Maps / 使用多个映射的示例 176
Summary / 小结 181
Exercises / 练习 182
References / 参考文献 189
Chapter 5 Hashing / 第5章 哈希 193
5.1 General Idea / 一般想法 193
5.2 Hash Function / 哈希函数 194
5.3 Separate Chaining / 分离链接法 196
5.4 Hash Tables without Linked Lists / 不用链表的哈希表 201
5.4.1 Linear Probing / 线性探测法 201
5.4.2 Quadratic Probing / 平方探测法 202
5.4.3 Double Hashing / 双哈希 207
5.5 Rehashing / 再哈希 208
5.6 Hash Tables in the Standard Library / 标准库中的哈希表 210
5.7 Hash Tables with Worst-Case O(1) Access / 以坏情形O(1)访问的哈希表 212
5.7.1 Perfect Hashing / 完美哈希 213
5.7.2 Cuckoo Hashing / 杜鹃哈希 215
5.7.3 Hopscotch Hashing / 跳房子哈希 227
5.8 Universal Hashing / 通用哈希 230
5.9 Extendible Hashing / 可扩哈希 233
Summary / 小结 236
Exercises / 练习 237
References / 参考文献 241