《计算机算法 C++版 C++》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:(美)Ellis Horowitz,(美)Sartaj Sahni,(美)Sanguthevar Rajasekaran著;冯博琴,叶茂,高海昌等译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2006
  • ISBN:7111176162
  • 页数:452 页
图书介绍:本书就是教会你如何设计算法并分析算法。本书介绍了算法和算法性能分析的基本知识,提供了基本的数据结构知识。重点讨论了不同的算法设计策略。对下界理论的研究,论证算法是否求解某个问题的渐进最好算法、确定是否存在更快算法等很有帮助。本书还讨论、研究了求解NP和NP完全问题的方案。介绍了近似算法、并行算法等涉及到的很多随机算法。在章节后面有大量习题,方便教学。本书适合作为高等院校计算机科学与技术专业的教材使用。本书也很适合作为算法设计的自学用书或重要参考书。

目录 1

出版者的话 1

专家指导委员会 1

译者序 1

前言 1

第1章 导论 1

1.1 什么是算法 1

1.2 算法规范 3

1.2.1 引言 3

1.2.2 递归算法 4

2.4.1 堆 5

1.3.1 空间复杂度 7

1.3 性能分析 7

1.3.2 时间复杂度 8

1.3.3 渐近符号(O、Ω、?) 14

1.3.4 实际复杂度 19

1.3.5 性能度量 21

1.4 随机算法 28

1.4.1 概率论基础 28

1.4.2 随机算法:非形式化的描述 30

1.4.3 识别重复元素 31

1.4.4 素数测试 33

1.4.5 优点与缺点 35

1.5 参考文献和读物 36

第2章 基本数据结构 39

2.1 栈和队列 39

2.2 树 44

2.2.1 术语 44

2.2.2 二叉树 45

2.3 字典 47

2.3.1 二叉查找树 48

2.3.2 代价分摊 52

2.4 优先队列 53

2.4.2 堆排序 58

2.5 集合和不相交集合的并 59

2.5.1 概述 59

2.5.2 并和查找操作 60

2.6 图 66

2.6.1 概述 66

2.6.2 定义 66

2.6.3 图的表示方法 69

2.7 参考文献和读物 73

第3章 分治算法 75

3.1 一般方法 75

3.2 二叉查找 77

3.3 查找最大值和最小值 82

3.4 归并排序 85

3.5 快速排序 90

3.5.1 性能度量 93

3.5.2 随机排序算法 94

3.6 选择 96

3.6.1 最坏情况下的最优算法 99

3.6.2 Select2的实现 101

3.7 Strassen矩阵乘法 104

3.8 凸包 107

3.8.1 几种原始几何方法 108

3.8.2 QuickHull算法 108

3.8.3 Graham扫描算法 109

3.8.4 一个O(nlogn)的分治算法 111

3.10 附加习题 113

3.9 参考文献和读物 113

第4章 贪心算法 115

4.1 一般方法 115

4.2 背包问题 116

4.3 树节点分割 118

4.4 带有期限的作业顺序问题 121

4.5 最小代价生成树 126

4.5.1 Prim算法 127

4.5.2 Kruskal算法 129

4.5.3 一个最优随机算法(*) 131

4.6 磁带的最优存储 133

4.7 最优归并模式 136

4.8 单源最短路径 140

4.9 参考文献和读物 144

4.10 附加习题 145

第5章 动态规划 147

5.1 一般方法 147

5.2 多部图 149

5.3 每一对顶点之间的最短路径 153

5.4 单源最短路径:普通权值 156

5.5 最优二叉查找树(*) 158

5.6 串编辑 163

5.7 0/1背包 165

5.8 可靠性设计 170

5.9 旅行商问题 172

5.10 流水作业调度 174

5.11 参考文献和读物 177

5.12 附加习题 178

第6章 基本的查找和遍历技术 181

6.1 二叉树算法 181

6.2 图算法 184

6.2.1 广度优先搜索和遍历 184

6.2.2 深度优先搜索和遍历 186

6.3 连通分支和生成树 187

6.4 双连通分支和DFS算法 189

6.5 参考文献和读物 193

第7章 回溯 195

7.1 一般方法 195

7.2 8皇后问题 202

7.3 子集求和问题 204

7.4 图的着色 206

7.5 哈密顿回路 209

7.6 背包问题 210

7.7 参考文献和读物 213

7.8 附加习题 214

第8章 分支限界法 217

8.1 一般方法 217

8.1.1 最小代价查找 218

8.1.2 15拼板:一个例子 219

8.1.3 LC查找的控制抽象 221

8.1.4 限界 223

8.1.5 FIFO分支限界法 224

8.1.6 LC分支限界法 225

8.2 0/1背包问题 226

8.2.1 LC分支限界法求解 226

8.2.2 FIFO分支限界法求解 228

8.3 旅行商问题(*) 230

8.4 效率因素 235

8.5 参考文献和读物 237

9.1 一般方法 239

第9章 代数问题 239

9.2 计算和插值 240

9.3 快速傅里叶变换 246

9.3.1 FFT的原地版本 250

9.3.2 一些保留问题 252

9.4 模运算 252

9.5 更快的计算和插值 257

9.6 参考文献和读物 262

第10章 下界理论 263

10.1 比较树 263

10.1.1 有序查找 264

10.1.2 排序 264

10.1.3 选择 268

10.2 喻示和对立论 269

10.2.1 归并 269

10.2.2 最大和次大 270

10.2.3 状态空间方法 271

10.2.4 选择 272

10.3 通过规约求下界 274

10.3.1 寻找凸包 274

10.3.2 不相交集合问题 275

10.3.3 即时中值查找 275

10.3.4 三角矩阵相乘 276

10.3.5 下三角矩阵求逆 277

10.3.6 计算传递闭包 278

10.4 解决代数问题的技术(*) 280

10.5 参考文献和读物 286

第11章 NP难与NP完全问题 289

11.1 基本概念 289

11.1.1 非确定性算法 289

11.1.2 NP难和NP完全类 294

11.2 Cook定理(*) 296

11.3 NP难的图问题 301

11.3.1 团判定问题 301

11.3.2 节点覆盖判定问题 302

11.3.3 色数判定问题 303

11.3.4 有向哈密顿回路(*) 304

11.3.5 旅行商判定问题 306

11.3.6 与/或图判定问题 306

11.4 NP难的调度问题 310

11.4.1 调度相同的处理器 310

11.4.2 流水作业调度 311

11.4.3 作业安排调度 312

11.5 NP难的代码生成问题 314

11.5.1 带有公共子表达式的代码生成 315

11.5.2 实现并行赋值指令 318

11.6 一些简化的NP难问题 319

11.7 参考文献和读物 321

11.8 附加习题 322

第12章 近似算法 325

12.1 概述 325

12.2.2 最多程序存储问题 327

12.2 绝对近似 327

12.2.1 平面图着色 327

12.2.3 NP难的绝对近似 328

12.3 ε近似 330

12.3.1 独立任务的调度 330

12.3.2 装箱问题 332

12.3.3 NP难的ε近似问题 333

12.4 多项式时间近似方案 337

12.4.1 独立任务的调度 337

12.4.2  0/1背包 338

12.5 完全多项式时间近似方案 341

12.5.1 舍入法 342

12.5.2 区间划分法 345

12.5.3 分割法 346

12.6 概率上的好算法(*) 349

12.7 参考文献和读物 350

12.8 附加习题 351

13.1 概述 355

第13章 PRAM算法 355

13.2 计算模型 357

13.3 基本技术和算法 361

13.3.1 前缀计算 361

13.3.2 表排序 362

13.4 选择 367

13.4.1 使用n2个处理器选择最大值 367

13.4.2 使用n个处理器选择最大值 368

13.4.3 在整数中选择最大值 369

13.4.4 使用n2个处理器的一般选择问题 370

13.4.5 一个工作最优的随机算法(*) 370

13.5 归并 372

13.5.1 对数时间算法 373

13.5.2 奇偶归并 373

13.5.3 工作最优的算法 374

13.5.4  O(log logm)时间算法 375

13.6 排序 376

13.6.1 奇偶归并排序 377

13.6.2 随机选择算法 377

13.6.3  Preparata算法 378

13.6.4  Reischuk随机算法(*) 379

13.7 图问题 381

13.7.1 计算传递闭包的另一种算法 382

13.7.2 每一对顶点之间的最短路径 383

13.8 计算凸包 383

13.9 下界 385

13.9.1 平均情况下排序的下界 386

13.9.2 寻找最大值 387

13.10 参考文献和读物 388

13.11 附加习题 389

第14章 网格算法 391

14.1 计算模型 391

14.2 分组路由 392

14.2.1 线性阵列中的分组路由 393

14.2.2 网格上PPR的贪心算法 394

14.2.3 具有小队列的随机算法 395

14.3 基本算法 397

14.3.1 广播 398

14.3.2 前缀计算 398

14.3.3 数据集中 400

14.3.4 稀疏枚举排序 401

14.4 选择 403

14.4.1 n=p(*)时的随机算法 403

14.4.2 n>p(*)时的随机选择 404

14.4.3 n>p时的确定性算法 404

14.5 归并 407

14.5.1 在线性阵列上的顺序号归并 407

14.5.2 线性阵列上的奇偶归并 408

14.5.3 在网格上的奇偶归并 408

14.6 排序 409

14.6.2 在网格上的排序 410

14.6.1 在线性阵列上的排序 410

14.7 图问题 413

14.7.1 传递闭包的n×n网格算法 414

14.7.2 每一对顶点之间的最短路径 415

14.8 计算凸包 416

14.9 参考文献和读物 418

14.10 附加习题 420

第15章 超立方体算法 423

15.1 计算模型 423

15.1.1 超立方体 423

15.1.2 蝶形网络 424

15.1.3 其他网络的嵌入 425

15.2 PPR路由 427

15.2.1 贪心算法 427

15.2.2 随机算法 428

15.3.1 广播 430

15.3.2 前缀计算 430

15.3 基本算法 430

15.3.3 数据集中 431

15.3.4 稀疏枚举排序 433

15.4 选择 434

15.4.1 n=p(*)时的随机算法 434

15.4.2 n>p(*)时的随机选择 435

15.4.3 n>p时的确定性算法 435

15.5.1 奇偶归并 437

15.5 归并 437

15.5.2 双调谐归并 438

15.6 排序  439

15.6.1 奇偶归并排序 439

15.6.2 双调谐排序 439

15.7 图问题 440

15.8 计算凸包 441

15.9 参考文献和读物 442

15.10 附加习题 443

索引 445