《算法设计与分析》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:李春葆主编;李筱驰,蒋林,陈良臣,喻丹丹编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2018
  • ISBN:9787302500988
  • 页数:445 页
图书介绍:本书系统地介绍了各种常用的算法设计策略,包括穷举法、分治法、贪心法、动态规划法、回溯法、分枝限界法等,并详细讨论了各种图搜索算法和计算几何设计算法。

第1章 概论 1

1.1 算法的概念 2

1.1.1 什么是算法 2

1.1.2 算法描述 4

1.1.3 算法和数据结构 5

1.1.4 算法设计的基本步骤 6

1.2 算法分析 6

1.2.1 算法时间复杂度分析 6

1.2.2 算法空间复杂度分析 13

1.3 算法设计工具——STL 15

1.3.1 STL概述 15

1.3.2 常用的STL容器 18

1.3.3 STL在算法设计中的应用 30

1.4 练习题 38

1.5 上机实验题 39

1.6 在线编程题 39

第2章 递归算法设计技术 43

2.1 什么是递归 44

2.1.1 递归的定义 44

2.1.2 何时使用递归 44

2.1.3 递归模型 46

2.1.4 递归算法的执行过程 47

2.2 递归算法设计 52

2.2.1 递归与数学归纳法 52

2.2.2 递归算法设计的一般步骤 53

2.2.3 递归数据结构及其递归算法设计 54

2.2.4 基于归纳思想的递归算法设计 60

2.3 递归算法设计示例 63

2.3.1 简单选择排序和冒泡排序 63

2.3.2 求解n皇后问题 66

2.4 递归算法转化为非递归算法 68

2.4.1 用循环结构替代递归过程 68

2.4.2 用栈消除递归过程 69

2.5 递推式的计算 74

2.5.1 用特征方程求解递归方程 74

2.5.2 用递归树求解递归方程 77

2.5.3 用主方法求解递归方程 78

2.6 练习题 78

2.7 上机实验题 80

2.8 在线编程题 81

第3章 分治法 83

3.1 分治法概述 84

3.1.1 分治法的设计思想 84

3.1.2 分治法的求解过程 84

3.2 求解排序问题 85

3.2.1 快速排序 86

3.2.2 归并排序 88

3.3 求解查找问题 91

3.3.1 查找最大和次大元素 91

3.3.2 折半查找 93

3.3.3 寻找一个序列中第k小的元素 94

3.3.4 寻找两个等长有序序列的中位数 96

3.4 求解组合问题 101

3.4.1 求解最大连续子序列和问题 101

3.4.2 求解棋盘覆盖问题 103

3.4.3 求解循环日程安排问题 106

3.5 求解大整数乘法和矩阵乘法问题 108

3.5.1 求解大整数乘法问题 108

3.5.2 求解矩阵乘法问题 111

3.6 并行计算简介 112

3.6.1 并行计算概述 112

3.6.2 并行计算模型 112

3.6.3 快速排序的并行算法 113

3.7 练习题 114

3.8 上机实验题 116

3.9 在线编程题 117

第4章 蛮力法 120

4.1 蛮力法概述 121

4.2 蛮力法的基本应用 122

4.2.1 采用直接穷举思路的一般格式 122

4.2.2 简单选择排序和冒泡排序 125

4.2.3 字符串匹配 128

4.2.4 求解最大连续子序列和问题 129

4.2.5 求解幂集问题 132

4.2.6 求解简单0/1背包问题 135

4.2.7 求解全排列问题 137

4.2.8 求解任务分配问题 139

4.3 递归在蛮力法中的应用 141

4.3.1 用递归方法求解幂集问题 141

4.3.2 用递归方法求解全排列问题 142

4.3.3 用递归方法求解组合问题 144

4.4 图的深度优先和广度优先遍历 146

4.4.1 图的存储结构 146

4.4.2 深度优先遍历 148

4.4.3 广度优先遍历 151

4.4.4 求解迷宫问题 154

4.5 练习题 158

4.6 上机实验题 160

4.7 在线编程题 160

第5章 回溯法 163

5.1 回溯法概述 164

5.1.1 问题的解空间 164

5.1.2 什么是回溯法 167

5.1.3 回溯法的算法框架及其应用 168

5.1.4 回溯法与深度优先遍历的异同 176

5.1.5 回溯法的时间分析 177

5.2 求解0/1背包问题 178

5.3 求解装载问题 182

5.3.1 求解简单装载问题 182

5.3.2 求解复杂装载问题 185

5.4 求解子集和问题 187

5.4.1 求子集和问题的解 187

5.4.2 判断子集和问题是否存在解 189

5.5 求解n皇后问题 191

5.6 求解图的m着色问题 193

5.7 求解任务分配问题 196

5.8 求解活动安排问题 198

5.9 求解流水作业调度问题 201

5.10 练习题 205

5.11 上机实验题 206

5.12 在线编程题 207

第6章 分枝限界法 211

6.1 分枝限界法概述 212

6.1.1 什么是分枝限界法 212

6.1.2 分枝限界法的设计思想 212

6.1.3 分枝限界法的时间性能 215

6.2 求解0/1背包问题 215

6.2.1 采用队列式分枝限界法求解 216

6.2.2 采用优先队列式分枝限界法求解 220

6.3 求解图的单源最短路径 223

6.3.1 采用队列式分枝限界法求解 223

6.3.2 采用优先队列式分枝限界法求解 228

6.4 求解任务分配问题 230

6.5 求解流水作业调度问题 234

6.6 练习题 238

6.7 上机实验题 239

6.8 在线编程题 240

第7章 贪心法 242

7.1 贪心法概述 243

7.1.1 什么是贪心法 243

7.1.2 用贪心法求解的问题应具有的性质 245

7.1.3 贪心法的一般求解过程 245

7.2 求解活动安排问题 246

7.3 求解背包问题 251

7.4 求解最优装载问题 256

7.5 求解田忌赛马问题 257

7.6 求解多机调度问题 260

7.7 哈夫曼编码 263

7.8 求解流水作业调度问题 272

7.9 练习题 275

7.10 上机实验题 277

7.11 在线编程题 278

第8章 动态规划 281

8.1 动态规划概述 282

8.1.1 从求解斐波那契数列看动态规划法 282

8.1.2 动态规划的原理 283

8.1.3 动态规划求解的基本步骤 289

8.1.4 动态规划与其他方法的比较 290

8.2 求解整数拆分问题 291

8.3 求解最大连续子序列和问题 293

8.4 求解三角形最小路径问题 296

8.5 求解最长公共子序列问题 299

8.6 求解最长递增子序列问题 303

8.7 求解编辑距离问题 304

8.8 求解0/1背包问题 307

8.9 求解完全背包问题 312

8.10 求解资源分配问题 314

8.11 求解会议安排问题 318

8.12 滚动数组 322

8.12.1 什么是滚动数组 322

8.12.2 用滚动数组求解0/1背包问题 323

8.13 练习题 325

8.14 上机实验题 327

8.15 在线编程题 328

第9章 图算法设计 334

9.1 求图的最小生成树 335

9.1.1 最小生成树的概念 335

9.1.2 用普里姆算法构造最小生成树 335

9.1.3 克鲁斯卡尔算法 337

9.2 求图的最短路径 342

9.2.1 狄克斯特拉算法 343

9.2.2 贝尔曼-福特算法 348

9.2.3 SPFA算法 351

9.2.4 弗洛伊德算法 354

9.3 求解旅行商问题 357

9.3.1 旅行商问题描述 357

9.3.2 采用蛮力法求解TSP问题 357

9.3.3 采用动态规划求解TSP问题 360

9.3.4 采用回溯法求解TSP问题 364

9.3.5 采用分枝限界法求解TSP问题 367

9.3.6 采用贪心法求解TSP问题 370

9.4 网络流 371

9.4.1 相关概念 371

9.4.2 求最大流 373

9.4.3 割集与割量 378

9.4.4 求最小费用最大流 379

9.5 练习题 388

9.6 上机实验题 389

9.7 在线编程题 389

第10章 计算几何 392

10.1 向量运算 393

10.1.1 向量的基本运算 394

10.1.2 判断一个点是否在一个矩形内 397

10.1.3 判断一个点是否在一条线段上 398

10.1.4 判断两条线段是否平行 398

10.1.5 判断两条线段是否相交 399

10.1.6 判断一个点是否在多边形内 400

10.1.7 求3个点构成的三角形的面积 401

10.1.8 求一个多边形的面积 401

10.2 求解凸包问题 402

10.2.1 礼品包裹算法 403

10.2.2 Graham扫描算法 405

10.3 求解最近点对问题 408

10.3.1 用蛮力法求最近点对 408

10.3.2 用分治法求最近点对 409

10.4 求解最远点对问题 412

10.4.1 用蛮力法求最远点对 413

10.4.2 用旋转卡壳法求最远点对 413

10.5 练习题 415

10.6 上机实验题 416

10.7 在线编程题 416

第11章 计算复杂性理论简介 418

11.1 计算模型 419

11.1.1 求解问题的分类 419

11.1.2 图灵机模型 419

11.2 P类和NP类问题 424

11.3 NPC问题 425

11.4 练习题 426

第12章 概率算法和近似算法 427

12.1 概率算法 428

12.1.1 什么是概率算法 428

12.1.2 蒙特卡罗类型概率算法 429

12.1.3 拉斯维加斯类型概率算法 431

12.1.4 舍伍德类型概率算法 433

12.2 近似算法 434

12.2.1 什么是近似算法 434

12.2.2 求解旅行商问题的近似算法 434

12.3 练习题 438

12.4 上机实验题 439

12.5 在线编程题 439

附录A 书中部分算法清单 440

参考文献 445