《ACM/ICPC算法基础训练教程》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:喻梅,于瑞国编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2015
  • ISBN:9787302414452
  • 页数:404 页
图书介绍:本书主要介绍ACM/ICPC的算法,分为九类,主要包括基础算法、数据结构算法、各种搜索方法、图论基础算法、网络流如最大流、最小流、上下界网络流算法、动态规划基础算法、数学基础、字符串算法及计算几何。每一部分内容先介绍基本概念、基础理论,再通过例题讲解算法。本书适用于刚刚步入ACM/ICPC的初学者,也是计算机专业本科生程序设计、数据结构、算法设计等课程的辅助教材,也适用于计算机编程爱好者。

第1章 基础算法 1

1.1 模拟题 1

1.1.1 基本概念 1

1.1.2 例题讲解 1

1.1.3 习题推荐 9

1.2 枚举算法 10

1.2.1 基本概念 10

1.2.2 例题讲解 10

1.2.3 习题推荐 13

1.3 递归算法 13

1.3.1 基本概念 13

1.3.2 例题讲解 14

1.3.3 习题推荐 16

1.4 贪心算法 16

1.4.1 基本概念 16

1.4.2 例题讲解 17

1.4.3 习题推荐 23

1.5 分治算法 24

1.5.1 基本概念 24

1.5.2 例题讲解 24

1.5.3 习题推荐 29

1.6 二分/三分算法 30

1.6.1 基本概念 30

1.6.2 例题讲解 30

1.6.3 习题推荐 33

第2章 数据结构 34

2.1 线性表 34

2.1.1 基本概念 34

2.1.2 基本特征 34

2.2 队列 35

2.2.1 基本概念 35

2.2.2 顺序队列的基本操作 35

2.2.3 循环队列 36

2.2.4 例题讲解 37

2.2.5 习题推荐 40

2.3 栈 40

2.3.1 基本概念 40

2.3.2 基本操作 40

2.3.3 栈的实现 41

2.3.4 栈的应用 42

2.3.5 例题讲解 43

2.3.6 习题推荐 44

2.4 堆 45

2.4.1 基本概念 45

2.4.2 基本操作 45

2.4.3 时间及空间复杂度 47

2.4.4 例题讲解 47

2.4.5 习题推荐 50

2.5 Hash 51

2.5.1 基本概念 51

2.5.2 哈希函数的构造方法 51

2.5.3 处理碰撞的方法 52

2.5.4 例题讲解 52

2.5.5 习题推荐 54

2.6 并查集 54

2.6.1 基本概念 54

2.6.2 基本操作 54

2.6.3 时间及空间复杂度 55

2.6.4 例题讲解 55

2.6.5 习题推荐 57

2.7 树状数组 57

2.7.1 基本概念 57

2.7.2 基本操作 58

2.7.3 时间及空间复杂度 59

2.7.4 例题讲解 59

2.7.5 习题推荐 63

2.8 线段树 63

2.8.1 基本概念 63

2.8.2 线段树中的“懒操作” 64

2.8.3 线段树的基本操作 64

2.8.4 例题讲解 66

2.8.5 习题推荐 69

2.9 最近公共祖先/区间最小值 70

2.9.1 基本概念 70

2.9.2 离线算法Tarjan 70

2.9.3 在线算法 71

2.9.4 RMQ 72

2.9.5 LAC+RMQ在线算法的具体实现 73

2.9.6 例题讲解 74

2.9.7 习题推荐 77

2.10 伸展树 77

2.10.1 基本概念 77

2.10.2 伸展树的基本操作 77

2.10.3 伸展树对区间的操作 81

2.10.4 例题讲解 83

2.10.5 习题推荐 92

2.11 K-Dimensional树 92

2.11.1 基本概念 92

2.11.2 基本思想 92

2.11.3 KD-Tree构建算法 93

2.11.4 例题讲解 95

2.11.5 习题推荐 98

第3章 搜索算法 99

3.1 宽度优先搜索 99

3.1.1 基本概念 99

3.1.2 算法实现 100

3.1.3 例题讲解 101

3.1.4 习题推荐 106

3.2 深度优先搜索 107

3.2.1 基本概念 107

3.2.2 算法实现 107

3.2.3 例题讲解 108

3.2.4 习题推荐 114

3.3 搜索与剪枝 114

3.3.1 基本概念 114

3.3.2 算法实现 114

3.3.3 例题讲解 115

3.3.4 习题推荐 117

3.4 A*算法 117

3.4.1 基本概念 117

3.4.2 算法实现 117

3.4.3 例题讲解 118

3.4.4 习题推荐 125

3.5 迭代加深搜索 125

3.5.1 基本概念 125

3.5.2 算法实现 125

3.5.3 例题讲解 126

3.5.4 习题推荐 132

3.6 双向宽度优先搜索 132

3.6.1 基本概念 132

3.6.2 算法实现 132

3.6.3 例题讲解 133

3.6.4 习题推荐 140

3.7 舞蹈链 140

3.7.1 基本概念 140

3.7.2 算法实现 140

3.7.3 例题讲解 141

3.7.4 习题推荐 146

第4章 图论基础 147

4.1 最小生成树 147

4.1.1 Prim算法 147

4.1.2 Kruskal算法 150

4.2 最短路 152

4.2.1 Dijkstra算法 152

4.2.2 Floyd算法 155

4.2.3 Bellman-Ford算法及SPFA算法 157

4.3 割点/割边 162

4.3.1 基本概念 162

4.3.2 算法实现 162

4.3.3 例题讲解 163

4.3.4 习题推荐 165

4.4 二分图匹配 166

4.4.1 基本概念 166

4.4.2 最大匹配 166

4.4.3 最大权匹配 167

4.4.4 习题推荐 167

4.5 拓扑排序 168

4.5.1 基本概念 168

4.5.2 算法实现 168

4.5.3 习题推荐 168

4.6 欧拉路和欧拉回路 168

4.6.1 基本概念 168

4.6.2 算法实现 169

4.6.3 例题讲解 169

4.6.4 习题推荐 172

4.7 强连通分量和2-SAT问题 172

4.7.1 基本概念 172

4.7.2 算法实现 173

4.7.3 2-SAT问题 174

4.7.4 例题讲解 174

4.7.5 习题推荐 181

第5章 网络流 182

5.1 最大流 182

5.1.1 网络流 182

5.1.2 残余网络与增广路 183

5.1.3 Ford-Fulkerson算法 184

5.1.4 最小割最大流定理 185

5.1.5 Dinic算法 186

5.1.6 例题讲解 191

5.1.7 习题推荐 200

5.2 费用流 200

5.2.1 最小费用流问题 200

5.2.2 最小费用流算法 201

5.2.3 实现代码 201

5.2.4 例题讲解 204

5.2.5 习题推荐 209

5.3 上下界网络流 209

第6章 动态规划算法 211

6.1 背包问题 211

6.1.1 基本概念 211

6.1.2 01背包问题 211

6.1.3 完全背包问题 213

6.1.4 多重背包问题 216

6.1.5 习题推荐 218

6.2 状态压缩 218

6.2.1 基本概念 218

6.2.2 经典旅行商问题 218

6.2.3 插头dp 221

6.2.4 习题推荐 228

6.3 动态规划优化 228

6.3.1 基本概念 228

6.3.2 数据结构优化 228

6.3.3 斜率优化 235

6.3.4 四边形不等式优化 238

6.3.5 习题推荐 240

6.4 常见动态规划题目类型 241

6.4.1 基本概念 241

6.4.2 树形dp 241

6.4.3 RMQ问题 243

6.4.4 有向图最短路 246

6.4.5 最长上升子序列 250

6.4.6 习题推荐 253

第7章 数学基础 254

7.1 组合游戏 254

7.1.1 基本概念 254

7.1.2 Nim游戏与Nim和 255

7.1.3 SG函数与SG定理 257

7.1.4 例题讲解 258

7.1.5 习题推荐 260

7.2 数论 261

7.2.1 基本概念 261

7.2.2 线性同余方程组 268

7.2.3 原根与离散对数 270

7.2.4 习题推荐 275

7.3 组合数学 276

7.3.1 基本计数问题 276

7.3.2 鸽巢原理 276

7.3.3 容斥原理 277

7.3.4 特殊计数数列 277

7.3.5 Pólya计数 279

7.3.6 习题推荐 281

7.4 快速傅里叶变换 281

7.4.1 多项式的表示 281

7.4.2 DFT与FFT算法 282

7.4.3 例题讲解 285

7.5 进一步学习的建议 286

第8章 字符串算法 288

8.1 Hash算法 288

8.1.1 基本概念 288

8.1.2 算法实现 289

8.1.3 例题讲解 290

8.1.4 习题推荐 292

8.2 最小循环表示 292

8.2.1 基本概念 292

8.2.2 算法实现 292

8.2.3 例题讲解 293

8.2.4 习题推荐 295

8.3 Manacher算法 295

8.3.1 基本概念 295

8.3.2 算法实现 295

8.3.3 例题讲解 296

8.3.4 习题推荐 297

8.4 KMP算法 297

8.4.1 基本概念 297

8.4.2 算法实现 298

8.4.3 next数组的性质 299

8.4.4 例题讲解 299

8.4.5 习题推荐 307

8.5 扩展KMP算法 308

8.5.1 基本概念 308

8.5.2 算法实现 308

8.5.3 例题讲解 309

8.5.4 习题推荐 315

8.6 字典树 316

8.6.1 基本概念 316

8.6.2 算法实现 316

8.6.3 例题讲解 317

8.6.4 习题推荐 322

8.7 AC自动机 322

8.7.1 基本概念 322

8.7.2 算法实现 322

8.7.3 AC自动机与动态规划算法的结合 324

8.7.4 例题讲解 324

8.7.5 习题推荐 335

8.8 后缀数组 335

8.8.1 基本概念 335

8.8.2 算法实现 335

8.8.3 后缀数组的使用技巧 339

8.8.4 例题讲解 339

8.8.5 习题推荐 343

8.9 后缀自动机 343

8.9.1 基本概念 343

8.9.2 算法实现 344

8.9.3 后缀自动机与动态规划的结合 346

8.9.4 例题讲解 346

8.9.5 习题推荐 359

第9章 计算几何基础 360

9.1 数学基础知识 360

9.2 向量的基本运算 361

9.2.1 基本概念 361

9.2.2 例题讲解 363

9.2.3 习题推荐 367

9.3 几何元素间的位置关系 368

9.3.1 基本概念 368

9.3.2 例题讲解 372

9.3.3 习题推荐 375

9.4 凸包 376

9.4.1 基本概念 376

9.4.2 例题讲解 377

9.4.3 习题推荐 379

9.5 半平面交 379

9.5.1 基本概念 379

9.5.2 算法实现 380

9.5.3 例题讲解 382

9.5.4 习题推荐 388

9.6 旋转卡壳算法 388

9.6.1 基本概念 388

9.6.2 例题讲解 389

9.7 三维几何 397

9.7.1 基本概念 397

9.7.2 习题推荐 399

9.8 三维凸包 399

9.8.1 基本概念 399

9.8.2 例题讲解 400

9.8.3 习题推荐 403

参考文献 404