《算法设计与分析 以ACM大学生程序设计竞赛在线题库为例》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:赵端阳,刘福庆,石洗凡编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2015
  • ISBN:9787302400073
  • 页数:404 页
图书介绍:本书主要包括经典的算法设计技术,介绍数据结构和标准模板库STL、递归与分治策略、动态规划、贪心算法、回溯算法、分支限界算法、图论、组合数学和计算几何问题。本书包括大量的问题实例,并在浙江大学和杭州电子科技大学在线题库中精选原题,详细地分析解题的方法,深入浅出地讲解用到的算法,并精选了在线题库中的典型题目作为每章后面的习题,供读者练习,以巩固所学的算法。

第1章 算法概述 1

1.1 引言 1

1.1.1 算法的描述 1

1.1.2 算法的设计 3

1.2 算法的复杂性 6

1.2.1 时间复杂性 6

1.2.2 空间复杂性 9

1.3 大学生程序设计竞赛概述 10

1.4 程序设计在线测试题库 11

第2章 数据结构和标准模板库STL 13

2.1 栈 13

2.2 向量 14

2.3 映射 17

2.4 列表 19

2.5 集合 21

2.6 队列 22

2.7 优先队列 23

2.8 ZOJ1004-Anagrams by Stack 25

2.9 ZOJ1094-Matrix Chain Multiplication 28

2.10 ZOJ1011-NTA 31

2.11 ZOJ1062-Trees Made to Order 36

2.12 ZOJ1097-Code the Tree 40

2.13 ZOJ1156-Unscrambling Images 43

2.14 ZOJ1167-Trees on the Level 47

2.15 ZOJ1016-Parencodings 50

2.16 ZOJ1944-Tree Recovery 53

2.17 ZOJ2104-Let the Balloon Rise 55

上机练习题 56

第3章 递归与分治策略 59

3.1 递归算法 59

3.1.1 Fibonacci数列 60

3.1.2 集合的全排列问题 61

3.1.3 整数划分问题 62

3.2 分治策略 63

3.2.1 分治法的基本步骤 63

3.2.2 分治法的适用条件 64

3.2.3 二分搜索技术 64

3.2.4 循环赛日程表 65

3.2.5 棋盘覆盖问题 67

3.2.6 选择问题 70

3.7.7 输油管道问题 72

3.2.8 半数集问题 73

3.2.9 整数因子分解 75

3.2.10 取余运算 76

3.3 ZOJ1633-Big String 78

上机练习题 79

第4章 动态规划 81

4.1 矩阵连乘积问题 82

4.1.1 分析最优解的结构 84

4.1.2 建立递归关系 85

4.1.3 计算最优值 85

4.1.4 构造最优解 87

4.2 动态规划算法的基本要素 88

4.2.1 最优子结构 88

4.2.2 重叠子问题 89

4.2.3 备忘录方法 89

4.3 最长公共子序列 91

4.3.1 最长公共子序列的结构 91

4.3.2 子问题的递归结构 92

4.3.3 计算最优值 92

4.3.4 构造最长公共子序列 94

4.4 最大子段和 94

4.5 0-1背包问题 96

4.5.1 递归关系分析 97

4.5.2 算法实现 97

4.6 最长单调递增子序列 99

4.7 数字三角形问题 100

4.8 ZOJ1027-Human Gene Functions 101

4.9 ZOJ1074-To the Max 105

4.10 ZOJ1093-Monkey and Banana 106

4.11 ZOJ1107-FatMouse and Cheese 111

4.12 ZOJ1108-FatMouse's Speed 114

4.13 ZOJ1147-Formatting Text 118

4.14 ZOJ1149-Dividing 123

4.15 ZOJ1163-The Staircases 127

4.16 ZOJ1183-Scheduling Lectures 130

4.17 ZOJ1196-Fast Food 133

4.18 ZOJ1206-Win the Bonus 137

4.19 ZOJ1227-Free Candies 140

4.20 ZOJ1234-Chopsticks 144

上机练习题 147

第5章 贪心算法 151

5.1 活动安排问题 151

5.2 贪心算法的理论基础 153

5.2.1 贪心选择性质 154

5.2.2 最优子结构性质 154

5.2.3 贪心算法的求解过程 154

5.3 背包问题 155

5.4 最优装载问题 158

5.5 单源最短路径 159

5.6 最小生成树 163

5.6.1 最小生成树的性质 163

5.6.2 Prim算法 164

5.6.3 Kruskal算法 166

5.7 删数问题 169

5.7.1 问题的贪心选择性质 170

5.7.2 问题的最优子结构性质 171

5.8 多处最优服务次序问题 171

5.8.1 问题的贪心选择性质 173

5.8.2 问题的最优子结构性质 173

5.9 ZOJ1012-Mainframe 174

5.10 ZOJ1025-Wooden Sticks 178

5.11 ZOJ1029-Moving Tables 181

5.12 ZOJ1076-Gene Assembly 183

5.13 ZOJ1161-Gone Fishing 185

5.14 ZOJ1171-Sorting the Photos 189

5.15 ZOJ2109-FatMouse'Trade 190

上机练习题 192

第6章 回溯算法 194

6.1 回溯算法的理论基础 194

6.1.1 问题的解空间 194

6.1.2 回溯法的基本思想 195

6.1.3 子集树与排列树 197

6.2 装载问题 198

6.3 0-1背包问题 201

6.4 图的m着色问题 203

6.5 n皇后问题 206

6.6 旅行商问题 208

6.7 流水作业调度问题 210

6.8 子集和问题 213

6.9 ZOJ1145-Dreisam Equations 215

6.10 ZOJ1157-A Plug for UNIX 220

6.11 ZOJ1166-Anagram Checker 226

6.12 ZOJ1213-Lumber Cutting 230

上机练习题 234

第7章 分支限界算法 235

7.1 分支限界算法的基本理论 235

7.1.1 分支限界算法策略 235

7.1.2 分支结点的选择 236

7.1.3 提高分支限界算法的效率 236

7.1.4 限界函数 237

7.2 单源最短路径问题 237

7.3 装载问题 242

7.4 0-1背包问题 245

7.5 旅行商问题 251

7.6 ZOJ1136-Multiple 254

7.7 回溯算法与分支限界算法的比较 258

上机练习题 258

第8章 图的搜索算法 259

8.1 图的深度优先搜索遍历 259

8.2 ZOJ1002-Fire Net 260

8.3 ZOJ1008-Gnome Tetravex 262

8.4 ZOJ1047-Image Perimeters 267

8.5 ZOJ1084-Channel Allocation 271

8.6 ZOJ1142-Maze 274

8.7 ZOJ1190-Optimal Programs 278

8.8 ZOJ1191-The Die Is Cast 284

8.9 ZOJ1204-Additive Equations 287

8.10 ZOJ1245-Triangles 290

8.11 ZOJ2100-Seeding 293

8.12 图的广度优先搜索遍历 296

8.13 ZOJ1079-Robotic Jigsaw 297

8.14 ZOJ1085-Alien Security 301

8.15 ZOJ1103-Hike on a Graph 305

8.16 ZOJ1148-The Game 308

8.17 ZOJ1217-Eight 311

8.18 ZOJ1091-Knight Moves 317

上机练习题 321

第9章 图论 323

9.1 网络流问题 323

9.1.1 流和割的概念 323

9.1.2 剩余网络和增广路 324

9.1.3 Ford-Fulkerson算法 325

9.1.4 Edmonds-Karp算法 326

9.1.5 ZOJ1734-Power Network——Edmonds-Karp算法 327

9.1.6 ISAP算法 330

9.1.7 ZOJ1734-Power Network——ISAP算法 332

9.1.8 Dinic算法 334

9.1.9 ZOJ1734-Power Network——Dinic算法 335

9.1.10 最小费用流——SPFA算法 337

9.1.11 ZOJ2404-Going Home——SPFA算法 338

9.2 二分图匹配问题 341

9.2.1 匹配问题 341

9.2.2 二分图最大匹配——匈牙利算法 343

9.2.3 ZOJ1137-Girls and Boys 344

9.2.4 ZOJ1140-Courses——匈牙利算法 346

9.2.5 PJU1247-The Perfect Stall——匈牙利算法 349

9.2.6 Hopcroft-Karp算法 352

9.2.7 ZOJ1140-Courses——Hopcroft-Karp算法 353

9.2.8 PJU1247-The Perfect Stall——Hopcroft-Karp算法 355

9.2.9 二分图最佳匹配——Kuhn Munkres算法 357

9.2.10 ZOJ2404-Going Home——Kuhn Munkres算法 358

上机练习题 360

第10章 数论 362

10.1 扩展欧几里得算法 362

10.2 PJU2115-C Looooops 363

10.3 欧拉函数 365

10.4 ZOJ1906-Relatives 366

10.5 PJU2480-Longge's Problem 367

10.6 PJU3696-The Luckiest Number 369

10.7 中国剩余定理 372

10.8 ZOJ1160-Biorhythms 372

10.9 一元线性同余方程组 374

10.10 PJU2891-Strange Way to Express Integers 375

10.11 HDU1572-X问题 377

上机练习题 378

第11章 组合数学 381

11.1 母函数 381

11.1.1 普通型母函数 381

11.1.2 指数型母函数 383

11.1.3 Stirling数 384

11.1.4 Catalan数 386

11.2 HDU2082-找单词 387

11.3 HDU1521-排列组合 388

11.4 HDU2065-“红色病毒”问题 389

11.5 HDU3625-Examining the Rooms 391

11.6 POJ2084-Game of Connections 393

11.7 容斥原理与鸽巢原理 394

11.7.1 容斥原理 394

11.7.2 错排问题 395

11.7.3 鸽巢原理 396

11.8 HDU2048-神、上帝以及老天爷 397

11.9 PJU2356-Find a Multiple 398

11.10 ZOJ2836-Number Puzzle 400

上机练习题 401

参考文献 404