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

  • 购买积分:13 如何计算积分?
  • 作  者:郑宗汉,郑晓明编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2005
  • ISBN:7302108943
  • 页数:359 页
图书介绍:本书系统地介绍计算机设计与分析的概念和方法,共四部分,第一部分为前两章,介绍算法设计与分析的基本概念以及必要的数学工具,对算法的时间复杂性的概念及算法的分析方法作了较为详细的叙述。第二部分为第3章到第9章,以算法设计技术为纲,从排序问题和离散集合的操作开始,进而介绍递归技术、分治法、贪婪法、动态规则、加溯法、分支与限界法、以及随机算法等算法设计技术及其复杂性分析。第三部分为第10章到第11章,介绍计算机应用领域里的一些算法,如图和网络中的一些问题,以及计算几何中的一些问题。第四部分为第12章到第15章,介绍算法设计与分析中的一些理论问题,如NP完全问题,计算复杂性问题、下界理论问题、最后分析了近似算法及其性能分析。本书内容选材适当,编排合理,由浅入深,循序渐进,互相衔接,逐步展开,可供高等学校计算机专业本科生和研究生的教材,也可作为计算机科学与应用的科学技术人员的参考资料。

目录 1

第1章 算法的基本概念 1

1.1 引言 1

1.1.1 算法的定义和特征 1

1.1.2 算法设计的例子,穷举法 3

1.1.3 算法的复杂性分析 5

1.2 算法的时间复杂性 6

1.2.1 算法的输入规模和运行时间的阶 6

1.2.2 运行时间的上界,O记号 9

1.2.3 运行时间的下界,Ω记号 10

1.2.4 运行时间的准确界,?记号 10

1.2.5 复杂性类型和o记号 13

1.3 算法的时间复杂性分析 14

1.3.1 循环次数的统计 15

1.3.2 基本操作频率的统计 18

1.3.3 计算步的统计 21

1.3.4 最坏情况和平均情况 22

1.3.5 最坏情况分析 23

1.3.6 平均情况分析 25

1.4 算法的空间复杂性 28

1.5 最优算法 29

习题 29

参考文献 31

第2章 常用的数学工具 33

2.1 常用的函数和公式 33

2.1.1 整数函数 33

2.1.2 对数函数 34

2.1.3 排列、组合和二项式系数 34

2.1.4 级数求和 36

2.2.1 生成函数及其性质 37

2.2 用生成函数求解递归方程 37

2.2.2 用生成函数求解递归方程 39

2.3 用特征方程求解递归方程 42

2.3.1 k阶常系数线性齐次递归方程 43

2.3.2 k阶常系数线性非齐次递归方程 45

2.4 用递推方法求解递归方程 48

2.4.1 递推 48

2.4.2 用递推法求解变系数递归方程 49

2.4.3 换名 50

习题 52

参考文献 53

第3章 排序问题和离散集合的操作 55

3.1 合并排序 55

3.1.1 合并排序算法的实现 55

3.1.2 合并排序算法的分析 57

3.2.1 堆 58

3.2 基于堆的排序 58

3.2.2 堆的操作 59

3.2.3 堆的建立 63

3.2.4 堆的排序 65

3.3 基数排序 66

3.3.1 基数排序算法的思想方法 67

3.3.2 基数排序算法的实现 68

3.3.3 基数排序算法的分析 70

3.4 离散集合的操作 71

3.4.1 离散集合的数据结构 71

3.4.2 union、find操作及路径压缩 73

习题 75

参考文献 76

4.1.2 递归算法的例子 78

4.1.1 归纳法的思想方法 78

第4章 递归和分治 78

4.1 基于归纳的递归算法 78

4.1.3 多项式求值的递归算法 81

4.1.4 排列问题的递归算法 82

4.1.5 递归算法的讨论 83

4.2 分治法 84

4.2.1 分治法引言 84

4.2.2 分治法的设计原理 87

4.2.3 快速排序 91

4.2.4 多项式乘积的分治算法 96

4.2.5 平面点集最接近点对问题 100

4.2.6 选择问题 107

习题 113

参考文献 114

5.1 贪婪法引言 115

第5章 贪婪法 115

5.1.1 贪婪法的设计思想 116

5.1.2 贪婪法的例子——货郎担问题 117

5.2 背包问题 118

5.2.1 背包问题贪婪算法的实现 118

5.2.2 背包问题贪婪算法的分析 119

5.3 单源最短路径问题 120

5.3.1 解最短路径的狄斯奎诺(Dijkstra)算法 121

5.3.2 狄斯奎诺算法的实现 122

5.3.3 狄斯奎诺算法的分析 124

5.4 最小花费生成树问题 125

5.4.1 最小花费生成树引言 125

5.4.2 克鲁斯卡尔(Kruskal)算法 126

5.4.3 普里姆(Prim)算法 130

习题 133

参考文献 135

第6章 动态规划 136

6.1 动态规划的思想方法 136

6.1.1 动态规划的最优决策原理 136

6.1.2 动态规划实例、货郎担问题 137

6.2 多段图的最短路径问题 139

6.2.1 多段图的决策过程 139

6.2.2 多段图动态规划算法的实现 141

6.3 资源分配问题 143

6.3.1 资源分配的决策过程 143

6.3.2 资源分配算法的实现 146

6.4 设备更新问题 148

6.4.1 设备更新问题的决策过程 148

6.4.2 设备更新算法的实现 150

6.5 最长公共子序列问题 152

6.5.1 最长公共子序列的搜索过程 153

6.5.2 最长公共子序列算法的实现 154

6.6 0/1背包问题 156

6.6.1 0/1背包问题的求解过程 156

6.6.2 0/1背包问题的实现 157

习题 159

参考文献 160

第7章 回溯 162

7.1 回溯法的思想方法 162

7.1.1 问题的解空间和状态空间树 162

7.1.2 状态空间树的动态搜索 163

7.1.3 回溯法的一般性描述 165

7.2 n后问题 168

7.2.1 四后问题的求解过程 168

7.2.2 n后问题算法的实现 169

7.3 图的着色问题 171

7.3.1 图着色问题的求解过程 172

7.3.2 图的m着色问题算法的实现 173

7.4 哈密尔顿回路问题 175

7.4.1 哈密尔顿回路的求解过程 176

7.4.2 哈密尔顿回路算法的实现 176

7.5 0/1背包问题 178

7.5.1 回溯法解0/1背包问题的求解过程 178

7.5.2 回溯法解0/1背包问题算法的实现 181

7.6 回溯法的效率分析 184

习题 186

参考文献 187

第8章 分支与限界 188

8.1 分支与限界法的基本思想 188

8.2 货郎担问题 190

8.2.1 费用矩阵的特性及归约 190

8.2.2 界限的确定和分支的选择 192

8.2.3 货郎担问题的求解过程 195

8.2.4 几个辅助函数的实现 198

8.2.5 货郎担问题分支限界算法的实现 204

8.3 0/1背包问题 206

8.3.1 分支限界法解0/1背包问题的思想方法和求解过程 206

8.3.2 0/1背包问题分支限界算法的实现 208

8.4 作业分配问题 211

8.4.1 分支限界法解作业分配问题的思想方法 211

8.4.2 分支限界法解作业分配问题算法的实现 214

习题 216

参考文献 217

第9章 随机算法 218

9.1 随机算法引言 218

9.1.1 随机算法的类型 218

9.1.2 随机数发生器 219

9.2.1 随机快速排序算法 220

9.2 舍伍德(Sherwood)算法 220

9.2.2 随机选择算法 221

9.3 拉斯维加斯(Las Vegas)算法 224

9.3.1 字符串匹配 225

9.3.2 整数因子 228

9.4 蒙特卡罗(Monte Carlo)算法 229

9.4.1 数组的主元素问题 230

9.4.2 素数测试 231

习题 234

参考文献 235

第10章 图和网络问题 236

10.1 图的遍历 236

10.1.1 图的深度优先搜索遍历 236

10.1.2 图的广度优先搜索遍历 240

10.1.3 无向图的接合点 243

10.1.4 有向图的强连通分支 246

10.2 网络流量 249

10.2.1 预备知识 249

10.2.2 Ford_Fulkerson方法和最大容量扩张 251

10.2.3 最短路径扩张 255

10.3 分图的最大匹配问题 258

10.3.1 预备知识 259

10.3.2 二分图最大匹配的匈牙利树方法 260

习题 266

参考文献 268

第11章 计算几何问题 269

11.1 引言 269

11.2 平面线段的交点问题 271

11.2.1 寻找平面线段交点的思想方法 272

11.2.2 寻找平面线段交点的实现 273

11.3 凸壳问题 278

11.3.1 凸壳问题的格雷厄姆(Graham)扫描法 279

11.3.2 格雷厄姆扫描法的实现 280

11.4 平面点集的直径问题 282

11.4.1 求取平面点集直径的思想方法 282

11.4.2 平面点集直径的求取 284

习题 286

参考文献 286

第12章 NP完全问题 287

12.1 P类和NP类问题 288

12.1.1 P类问题 288

12.1.2 NP类问题 289

12.2 NP完全问题 291

12.2.1 NP完全问题的定义 291

12.2.2 几个典型的NP完全问题 292

12.2.3 其他的NP完全问题 298

12.3 co_NP类和NPI类问题 299

习题 301

参考文献 302

第13章 计算复杂性 303

13.1 计算模型 303

13.1.1 图灵机的基本模型 303

13.1.2 k带图灵机和时间复杂性 306

13.1.3 离线图灵机和空间复杂性 308

13.1.4 可满足性问题和Cook定理 310

13.2 复杂性类型之间的关系 313

13.2.1 时间复杂性和空间复杂性的关系 313

13.2.2 时间谱系定理和空间谱系定理 316

13.2.3 填充变元 320

13.3 归约性关系 321

13.4 完备性 325

13.4.1 NLOGSPACE完全问题 325

13.4.2 PSPACE完全问题和P完全问题 326

习题 328

参考文献 329

第14章 下界 330

14.1 平凡下界 330

14.2 判定树模型 330

14.2.1 检索问题 331

14.2.2 排序问题 332

14.3 代数判定树模型 333

14.3.1 代数判定树模型及下界定理 333

14.3.2 极点问题 335

14.4 线性时间归约 336

14.4.1 凸壳问题 336

14.4.2 多项式插值问题 337

习题 338

参考文献 339

第15章 近似算法 340

15.1 近似算法的性能 340

15.2 装箱问题 341

15.2.1 首次适宜算法 342

15.2.2 最适宜算法及其他算法 343

15.3 顶点覆盖问题 344

15.4 货郎担问题 347

15.4.1 欧几里德货郎担问题 347

15.4.2 一般的货郎担问题 349

15.5 多项式近似方案 350

15.5.1 0/1背包问题的多项式近似方案 350

15.5.2 子集求和问题的完全多项式近似方案 353

习题 355

参考文献 356

参考文献 357