《算法竞赛入门经典 第2版》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:刘汝佳编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2014
  • ISBN:9787302356288
  • 页数:465 页
图书介绍:本书是一本算法竞赛的入门教材,主要内容包括程序设计入门、循环结构程序设计、数组和字符串、函数和递归、基础题目选解、数据结构基础、暴力求解法、高效算法设计、动态规划初步、数学概念与方法、图论模型与算法等,基本覆盖了算法竞赛入门所需的主要知识点。本书可作为全国青少年信息学奥林匹克联赛(NOIP)的复赛教材及ACM国际大学生程序设计竞赛(ACM/ICPC)的入门参考,还可作为IT工程师与科研人员的参考用书。

第1部分 语言篇 1

第1章 程序设计入门 1

1.1 算术表达式 1

1.2 变量及其输入 3

1.3 顺序结构程序设计 6

1.4 分支结构程序设计 9

1.5 注解与习题 13

1.5.1 C语言、C99、C11及其他 13

1.5.2 数据类型与输入格式 14

1.5.3 习题 15

1.5.4 小结 16

第2章 循环结构程序设计 18

2.1 for循环 18

2.2 while循环和do-while循环 22

2.3 循环的代价 25

2.4 算法竞赛中的输入输出框架 27

2.5 注解与习题 34

2.5.1 习题 34

2.5.2 小结 36

第3章 数组和字符串 37

3.1 数组 37

3.2 字符数组 41

3.3 竞赛题目选讲 45

3.4 注解与习题 53

3.4.1 进位制与整数表示 54

3.4.2 思考题 55

3.4.3 黑盒测试和在线评测系统 55

3.4.4 例题一览与习题 56

3.4.5 小结 59

第4章 函数和递归 61

4.1 自定义函数和结构体 61

4.2 函数调用与参数传递 65

4.2.1 形参与实参 65

4.2.2 调用栈 66

4.2.3 用指针作参数 69

4.2.4 初学者易犯的错误 71

4.2.5 数组作为参数和返回值 71

4.2.6 把函数作为函数的参数 73

4.3 递归 74

4.3.1 递归定义 74

4.3.2 递归函数 75

4.3.3 C语言对递归的支持 75

4.3.4 段错误与栈溢出 77

4.4 竞赛题目选讲 79

4.5 注解与习题 92

4.5.1 头文件、副作用及其他 93

4.5.2 例题一览和习题 95

4.5.3 小结 99

第5章 C++与STL入门 100

5.1 从C到C++ 100

5.1.1 C++版框架 101

5.1.2 引用 102

5.1.3 字符串 103

5.1.4 再谈结构体 105

5.1.5 模板 106

5.2 STL初步 108

5.2.1 排序与检索 108

5.2.2 不定长数组:vector 109

5.2.3 集合:set 112

5.2.4 映射:map 113

5.2.5 栈、队列与优先队列 115

5.2.6 测试STL 120

5.3 应用:大整数类 123

5.3.1 大整数类BigInteger 124

5.3.2 四则运算 125

5.3.3 比较运算符 126

5.4 竞赛题目举例 127

5.5 习题 134

第2部分 基础篇 139

第6章 数据结构基础 139

6.1 再谈栈和队列 139

6.2 链表 143

6.3 树和二叉树 148

6.3.1 二叉树的编号 148

6.3.2 二叉树的层次遍历 150

6.3.3 二叉树的递归遍历 155

6.3.4 非二叉树 160

6.4 图 162

6.4.1 用DFS求连通块 162

6.4.2 用BFS求最短路 164

6.4.3 拓扑排序 167

6.4.4 欧拉回路 168

6.5 竞赛题目选讲 170

6.6 训练参考 175

第7章 暴力求解法 182

7.1 简单枚举 182

7.2 枚举排列 184

7.2.1 生成l~n的排列 184

7.2.2 生成可重集的排列 185

7.2.3 解答树 186

7.2.4 下一个排列 187

7.3 子集生成 188

7.3.1 增量构造法 188

7.3.2 位向量法 188

7.3.3 二进制法 189

7.4 回溯法 191

7.4.1 八皇后问题 191

7.4.2 其他应用举例 194

7.5 路径寻找问题 198

7.6 迭代加深搜索 206

7.7 竞赛题目选讲 209

7.8 训练参考 213

第3部分 竞赛篇 220

第8章 高效算法设计 220

8.1 算法分析初步 220

8.1.1 渐进时间复杂度 220

8.1.2 上界分析 222

8.1.3 分治法 223

8.1.4 正确对待算法分析结果 224

8.2 再谈排序与检索 225

8.2.1 归并排序 225

8.2.2 快速排序 227

8.2.3 二分查找 227

8.3 递归与分治 229

8.4 贪心法 231

8.4.1 背包相关问题 231

8.4.2 区间相关问题 232

8.4.3 Huffman编码 234

8.5 算法设计与优化策略 235

8.6 竞赛题目选讲 244

8.7 训练参考 252

第9章 动态规划初步 259

9.1 数字三角形 259

9.1.1 问题描述与状态定义 259

9.1.2 记忆化搜索与递推 260

9.2 DAG上的动态规划 262

9.2.1 DAG模型 262

9.2.2 最长路及其字典序 262

9.2.3 固定终点的最长路和最短路 264

9.2.4 小结与应用举例 267

9.3 多阶段决策问题 270

9.3.1 多段图的最短路 270

9.3.2 0-1背包问题 271

9.4 更多经典模型 274

9.4.1 线性结构上的动态规划 274

9.4.2 树上的动态规划 280

9.4.3 复杂状态的动态规划 284

9.5 竞赛题目选讲 290

9.6 训练参考 303

第10章 数学概念与方法 310

10.1 数论初步 310

10.1.1 欧几里德算法和唯一分解定理 310

10.1.2 Eratosthenes筛法 312

10.1.3 扩展欧几里德算法 313

10.1.4 同余与模算术 314

10.1.5 应用举例 316

10.2 计数与概率基础 318

10.2.1 杨辉三角与二项式定理 319

10.2.2 数论中的计数问题 321

10.2.3 编码与解码 323

10.2.4 离散概率初步 324

10.3 其他数学专题 327

10.3.1 递推 327

10.3.2 数学期望 332

10.3.3 连续概率 334

10.4 竞赛题目选讲 336

10.5 训练参考 341

第11章 图论模型与算法 352

11.1 再谈树 352

11.1.1 无根树转有根树 352

11.1.2 表达式树 353

11.2 最小生成树 355

11.2.1 Kruskal算法 356

11.2.2 竞赛题目选解 358

11.3 最短路问题 359

11.3.1 Dijkstra算法 359

11.3.2 Bellman-Ford算法 363

11.3.3 Floyd算法 364

11.3.4 竞赛题目选讲 365

11.4 网络流初步 366

11.4.1 最大流问题 366

11.4.2 增广路算法 367

11.4.3 最小割最大流定理 369

11.4.4 最小费用最大流问题 370

11.4.5 应用举例 372

11.5 竞赛题目选讲 375

11.6 训练参考 379

11.7 总结与展望 384

第12章 高级专题 386

12.1 知识点选讲 386

12.1.1 自动机 386

12.1.2 树的经典问题和方法 392

12.1.3 可持久化数据结构 397

12.1.4 多边形的布尔运算 399

12.2 难题选解 404

12.2.1 数据结构 404

12.2.2 网络流 409

12.2.3 数学 411

12.2.4 几何 415

12.2.5 非完美算法 419

12.2.6 杂题选讲 423

12.3 小结与习题 446

附录A 开发环境与方法 455

A.1 命令行 455

A.1.1 文件系统 455

A.1.2 进程 456

A.1.3 程序的执行 456

A.1.4 重定向和管道 457

A.1.5 常见命令 457

A.2 操作系统脚本编程入门 458

A.2.1 Windows下的批处理 458

A.2.2 Linux下的Bash脚本 459

A.2.3 再谈随机数 460

A.3 编译器和调试器 460

A.3.1 gcc的安装和测试 460

A.3.2 常见编译选项 461

A.3.3 gdb简介 462

A.3.4 gdb的高级功能 463

A.4 浅谈IDE 464

主要参考书目 465