《算法基础》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:(美)罗德·斯蒂芬斯(Rod Stephens)著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2017
  • ISBN:9787111560920
  • 页数:402 页
图书介绍:本书的撰写有机结合了理论与实现,在讲授算法理论的同时也通过C#实例讲授了算法的实现。通过描述并分析一些重要的传统算法,从而理解它们并且了解每一个算法在什么时候使用较为适合,通俗易懂地教授读者创造自己的算法的技巧。这些技巧让读者能从不同的角度看问题,建立有用的方法工具,从而解决实际问题,抑或从容面对面试难题。本书适合当作“算法设计与分析”和“数据结构与算法”两门课程的教材或参考书使用。特别是本书还融入和面试相关的内容,因此适合作为算法相关工作面试的参考资料。

第1章 算法基础知识 1

1.1方法 1

1.2算法和数据结构 2

1.3伪代码 2

1.4算法的特点 4

1.4.1大O符号 5

1.4.2常见的运行时间函数 7

1.4.3可视化函数 12

1.5实际因素 12

1.6总结 13

练习 13

第2章 数值算法 16

2.1随机化数据 16

2.1.1随机数生成 16

2.1.2随机化数组 20

2.1.3生成不均匀分布 21

2.2寻找最大公约数 21

2.3求幂运算 23

2.4有关素数的运算 24

2.4.1寻找素数因子 24

2.4.2寻找素数 26

2.4.3素性测试 27

2.5进行数值积分 28

2.5.1矩形规则 28

2.5.2梯形规则 29

2.5.3自适应求积 30

2.5.4蒙特卡罗积分 32

2.6查找零 32

2.7总结 34

练习 34

第3章 链表 36

3.1基本概念 36

3.2单链表 37

3.2.1遍历链表 37

3.2.2查找单元格 37

3.2.3使用哨兵 38

3.2.4在开头添加单元格 39

3.2.5在结尾添加单元格 40

3.2.6在某个单元格后插入单元格 40

3.2.7删除单元格 41

3.3双向链表 42

3.4有序链表 43

3.5链表算法 44

3.5.1复制链表 44

3.5.2链表的插入排序 45

3.6链表的选择排序 46

3.7多线程链表 47

3.8循环链表 48

3.8.1标记单元格 49

3.8.2使用散列表 50

3.8.3链表回溯 51

3.8.4反转链表 51

3.8.5乌龟和兔子 53

3.8.6双向链表中的循环问题 55

3.9总结 55

练习 55

第4章 数组 57

4.1基本概念 57

4.2一维数组 58

4.2.1查找元素 58

4.2.2查找最大值、最小值、平均值 59

4.2.3插入元素 60

4.2.4移除元素 61

4.3非零下界 61

4.3.1二维数组 61

4.3.2多维数组 62

4.4三角形数组 64

4.5稀疏数组 66

4.5.1找到行或列 67

4.5.2获取值 68

4.5.3设置值 69

4.5.4删除值 71

4.6矩阵 72

4.7总结 74

练习 74

第5章 栈和队列 76

5.1栈 76

5.1.1栈的链表实现 76

5.1.2栈的数组实现 77

5.1.3双向栈 78

5.1.4栈的算法 79

5.2队列 84

5.2.1队列的链表实现 84

5.2.2队列的数组实现 85

5.2.3专用队列 86

5.3总结 87

练习 87

第6章 排序 89

6.1时间复杂度为O(N2)的算法 89

6.1.1数组中的插入排序 89

6.1.2数组中的选择排序 90

6.1.3冒泡排序 91

6.2时间复杂度为O(N logN)的算法 93

6.2.1堆排序 93

6.2.2快速排序 98

6.2.3归并排序 103

6.3时间复杂度为亚O(N logN)的算法 105

6.3.1计数排序 106

6.3.2桶排序 107

6.4总结 108

练习 108

第7章 搜索 110

7.1线性搜索 110

7.2二分搜索 111

7.3插值搜索 112

7.4总结 113

练习 113

第8章 散列表 114

8.1散列表的基础知识 114

8.2链 115

8.3开放寻址 116

8.3.1删除记录 117

8.3.2线性探测 118

8.3.3二次探测 119

8.3.4伪随机探测 120

8.3.5双散列 120

8.3.6有序散列 121

8.4总结 122

练习 123

第9章 递归 125

9.1基础算法 125

9.1.1阶乘 125

9.1.2斐波那契数 127

9.1.3汉诺塔 128

9.2图算法 130

9.2.1科赫曲线 130

9.2.2希尔伯特曲线 131

9.2.3谢尔宾斯基曲线 132

9.2.4垫片 134

9.3回溯算法 134

9.3.1八皇后问题 136

9.3.2骑士巡游 138

9.4选择与排列 140

9.4.1循环选择 140

9.4.2重复选择 141

9.4.3不重复选择 142

9.4.4元素可重复的排列 143

9.4.5元素不重复的排列 144

9.5消去递归 145

9.5.1尾递归的消除 145

9.5.2存储中间值 146

9.5.3一般递归的消除 148

9.6总结 150

练习 151

第10章树 153

10.1树的术语 153

10.2二叉树属性 155

10.3树的表示 157

10.3.1建立树的通用方法 157

10.3.2构造完全树 159

10.4树的遍历 160

10.4.1前序遍历 160

10.4.2中序遍历 162

10.4.3后序遍历 163

10.4.4深度优先遍历 164

10.4.5遍历的运行时间 164

10.5排序树 165

10.5.1添加结点 165

10.5.2查找结点 166

10.5.3删除结点 167

10.6线索树 168

10.6.1建立线索树 169

10.6.2使用线索树 171

10.7特化树算法 172

10.7.1动物游戏 172

10.7.2表达式求值 173

10.7.3四叉树 175

10.7.4 Trie树 179

10.8总结 182

练习 182

第11章 平衡树 185

11.1 AVL树 185

11.1.1添加值 185

11.1.2删除值 187

11.2 2-3树 187

11.2.1添加值 188

11.2.2删除值 189

11.3 B树 191

11.3.1添加值 191

11.3.2删除值 192

11.4平衡树变体 193

11.4.1自上而下的B树 193

11.4.2 B+树 193

11.5总结 194

练习 195

第12章 决策树 196

12.1游戏搜索树 196

12.1.1极小化极大值算法 197

12.1.2初始步骤和反应 199

12.1.3启发式游戏树 200

12.2搜索通用决策树 201

12.2.1优化问题 202

12.2.2穷举搜索 202

12.2.3分支界限 203

12.2.4决策树的启发式搜索 205

12.2.5其他决策树问题 209

12.3总结 212

练习 195

第13章 基本网络算法 214

13.1网络术语 214

13.2网络的表示方法 216

13.3网络的遍历 218

13.3.1深度优先遍历 218

13.3.2广度优先遍历 220

13.3.3连通性测试 221

13.3.4生成树 223

13.3.5最小生成树 224

13.4寻找路径 225

13.4.1寻找任一路径 225

13.4.2标签设置最短路径 225

13.4.3标签校正最短路径 227

13.4.4任意两点间最短路径 228

13.5总结 232

练习 232

第14章 更多的网络算法 234

14.1拓扑排序 234

14.2回路检测 236

14.3地图着色 237

14.3.1两色着色 237

14.3.2三色着色 238

14.3.3四色着色 239

14.3.4五色着色 239

14.3.5其他地图着色算法 241

14.4最大流 242

14.4.1工作分配 243

14.4.2最小割 244

14.5总结 245

练习 246

第15章 字符串算法 247

15.1括号匹配 247

15.1.1求算术表达式 248

15.1.2构建解析树 248

15.2模式匹配 249

15.2.1DFA 249

15.2.2为正则表达式建立DFA 251

15.2.3 NFA 252

15.3字符串搜索 253

15.4计算编辑距离 256

15.5总结 258

练习 258

第16章 密码学 260

16.1术语 260

16.2换位密码 261

16.2.1行/列换位 261

16.2.2列换位 262

16.2.3路由加密算法 263

16.3替换密码 264

16.3.1凯撒替换 264

16.3.2维吉尼亚密码 265

16.3.3简单替换密码 266

16.3.4一次性密码本 266

16.4分组密码 267

16.4.1代换-置换网络 267

16.4.2 Feistel密码 268

16.5公钥加密和RSA 269

16.5.1欧拉函数 270

16.5.2在取模运算下的乘法逆元素 270

16.5.3一个RSA的例子 270

16.5.4现实思考 271

16.6加密技术的其他用途 271

16.7总结 272

练习 273

第17章 复杂性理论 274

17.1符号 274

17.2复杂性分类 275

17.3归约 277

17.3.1 3SAT 278

17.3.2二分图匹配 278

17.4 NP难问题 279

17.5检测、报告和优化问题 279

17.5.1检测≤p报告 279

17.5.2报告≤p优化 280

17.5.3报告≤p检测 280

17.5.4优化≤p报告 280

17.6 NP完全问题 281

17.7总结 282

练习 283

第18章 分布式程序设计 284

18.1并行的种类 284

18.1.1脉动阵列 284

18.1.2分布式计算 286

18.1.3多CPU的处理 287

18.1.4竞争条件 287

18.1.5死锁 290

18.1.6量子计算 291

18.2分布式算法 291

18.2.1调试分布式算法 292

18.2.2高度并行算法 292

18.2.3归并排序 293

18.2.4哲学家进餐 294

18.2.5两个将军问题 296

18.2.6拜占庭将军 297

18.2.7一致性 298

18.2.8领导人选举 301

18.2.9快照 301

18.2.10时钟同步 302

18.3总结 303

练习 303

第19章 面试难题 305

19.1面试难题提问 306

19.2面试难题回答 307

19.3总结 309

练习 311

附录A算法概念综述 312

附录B练习解答 320

索引 371