《从算法到程序》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:徐子珊编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2013
  • ISBN:9787302304746
  • 页数:557 页
图书介绍:本书笔者力求对每一个理论算法都给出现有技术的程序实现,用以验证理论算法的正确性。虽然此前已经在理论上证明了算法的正确性,但通过实现了的程序的正确运行进一步证明理论是可行的。并且,算法的程序实现及对测试数据的调试运行能使读者深入理解算法的思想及其中细节微妙之处。2.理论严谨,语言规范。

第1章 计算问题 1

1.1计算问题及其算法 1

1.1.1计算问题及其描述 1

1.1.2算法及其描述 2

1.1.3伪代码的使用约定 3

1.1.4算法分析 4

1.1.5算法运行时间的渐近表示 5

1.2数据结构 6

1.2.1什么是数据结构 6

1.2.2数据结构对算法效率的影响 7

1.2.3字典与字典操作 8

1.3程序设计 10

1.3.1算法与程序 10

1.3.2数据类型的抽象与代码通用性 11

1.4数据的输入输出 13

1.4.1应用问题 13

1.4.2标准输入输出 15

1.4.3文件输入输出 20

1.5计数问题 22

1.5.1简单模拟 23

1.5.2加法原理和乘法原理 25

1.5.3整数序列 31

第2章 数据结构基础 37

2.1线性表 38

2.1.1线性表的链表表示 38

2.1.2对链表的操作 39

2.1.3链表的程序实现 42

2.1.4链表应用 47

2.2栈 53

2.2.1栈的概念及其链表实现 53

2.2.2栈的程序实现 54

2.2.3栈的应用 56

2.3队列 62

2.3.1队列的概念及其链表实现 62

2.3.2队列的程序实现 63

2.3.3队列的应用 64

2.4二叉搜索树 68

2.4.1二叉树及其在计算机中的表示 68

2.4.2二叉搜索树 76

2.4.3二叉搜索树的查询操作 76

2.4.4二叉搜索树中元素的增删 78

2.4.5红-黑树及其性质 80

2.4.6红-黑树的操作 83

2.4.7红-黑树的程序实现 92

2.4.8二叉搜索树的应用 102

2.5散列表 102

2.5.1直接寻址表与散列表 102

2.5.2用拉链解决冲突 104

2.5.3散列表的程序实现 106

2.5.4散列表的应用 109

第3章 基本算法设计策略 112

3.1渐增型算法 112

3.1.1有序序列的合并问题 112

3.1.2序列的划分问题 117

3.2分治算法 121

3.2.1归并排序算法 122

3.2.2快速排序算法 126

3.2.3序统计与选择问题 130

3.3排序问题的讨论 132

3.3.1排序的性质 132

3.3.2比较型排序算法的时间复杂度 133

3.3.3应用 136

3.4堆与基于堆的优先队列 141

3.4.1堆的概念及其创建 141

3.4.2基于二叉堆的优先队列 149

3.4.3应用 153

第4章 代数计算 169

4.1矩阵及其计算 169

4.1.1矩阵与向量 169

4.1.2矩阵的运算 171

4.1.3矩阵的性质 173

4.1.4矩阵的程序实现 174

4.2矩阵的LUP分解 176

4.2.1 LUP分解法概述 177

4.2.2 LU分解 178

4.2.3计算LUP分解 179

4.2.4程序实现 182

4.3解线性方程组 183

4.3.1前代法和回代法 183

4.3.2用LUP分解计算矩阵的逆 185

4.3.3程序实现 186

4.4多项式及其计算 188

4.4.1多项式及其表示 188

4.4.2多项式的运算 190

4.4.3 FFT 191

4.4.4程序实现 199

4.5应用 204

4.5.1多项式的泰勒展开式 204

4.5.2完善序列 208

4.5.3函数的有理式逼近 211

第5章 计算几何 218

5.1线段的性质 218

5.1.1叉积及其应用 219

5.1.2向量的极角 222

5.1.3程序实现 223

5.2判断是否存在线段相交 226

5.2.1算法描述与分析 227

5.2.2程序实现 230

5.3求凸壳 234

5.3.1 Graham扫描 235

5.3.2程序实现 239

5.4求最邻近点对 242

5.4.1算法描述与分析 242

5.4.2程序实现 245

5.5应用 248

5.5.1光导管 248

5.5.2最小边界矩形 255

5.5.3德克萨斯一日游 260

第6章 数论算法 264

6.1整数的表示 264

6.1.1整数的表示 264

6.1.2整数的算术运算 264

6.1.3程序实现 269

6.1.4应用 275

6.2初等数论的概念 277

6.3最大公约数 283

6.3.1 Euclid算法 284

6.3.2 EUCLID算法的运行时间 284

6.3.3 Euclid算法的迭代版本 286

6.3.4程序实现 287

6.3.5应用 289

6.4模运算 294

6.4.1模加法和乘法 295

6.4.2解模线性方程 296

6.4.3元素的幂 299

6.4.4应用 303

6.5素数检测 305

6.5.1伪素数检测 305

6.5.2 Miller-Rabin的随机素数检测 308

6.5.3 Miller-Rabin素数检测的错误率 310

6.5.4程序实现 310

6.6整数分解 313

6.6.1 Pollard的ρ探索法 313

6.6.2程序实现 317

6.6.3应用 320

第7章 回溯策略 323

7.1组合问题 323

7.1.1组合问题的例子 323

7.1.2组合问题的形式化描述 325

7.2组合问题的回溯算法 326

7.2.1解空间的树状结构 326

7.2.2解决组合问题的回溯算法 328

7.2.3回溯算法的框架 333

7.3子集树和排列树 339

7.3.1子集树问题 339

7.3.2排列树问题 343

7.3.3应用 349

7.4用回溯算法解决组合优化问题 360

7.4.1组合优化问题 360

7.4.2用回溯策略解决组合优化问题 362

7.4.3应用 365

第8章 动态规划策略 375

8.1组装线调度问题 376

8.1.1问题描述 376

8.1.2算法设计与分析 378

8.1.3应用——牛牛玩牌 381

8.2最长公共子序列 386

8.2.1问题描述 386

8.2.2算法设计与分析 386

8.2.3程序实现 389

8.2.4应用 390

8.3 0-1背包问题 398

8.3.1问题描述 398

8.3.2算法设计与分析 398

8.3.3程序实现 401

8.3.4应用 402

8.4带权有向图中任意两点间的最短路径 409

8.4.1问题描述 409

8.4.2算法设计与分析 410

8.4.3程序实现 413

8.4.4应用——牛牛聚会 415

第9章 贪婪策略 419

9.1活动选择问题 419

9.1.1算法描述与分析 419

9.1.2程序实现 423

9.1.3贪婪算法与动态规划 424

9.1.4应用——海岸雷达 425

9.2 Huffman编码 428

9.2.1算法描述与分析 428

9.2.2应用——R叉Huffman树 433

9.2.3程序实现 437

9.3最小生成树 443

9.3.1算法描述与分析 443

9.3.2程序实现 446

9.3.3应用——北方通信网 448

9.4单源最短路径问题 453

9.4.1算法描述与分析 453

9.4.2程序实现 456

9.4.3应用——西气东送 458

第10章 图的搜索算法 465

10.1深度优先搜索 466

10.1.1算法描述与分析 466

10.1.2程序实现 469

10.1.3有向无圈图的拓扑排序 472

10.1.4应用——全排序 478

10.2有向图的强连通分支 482

10.2.1算法描述与分析 482

10.2.2程序实现 486

10.2.3应用——亲情号 489

10.3无向图的双连通分支 494

10.3.1算法描述与分析 494

10.3.2程序实现 497

10.3.3应用——雌雄大盗 498

10.4广度优先搜索 504

10.4.1算法描述与分析 504

10.4.2程序实现 507

10.4.3应用——攻城掠地 508

10.5流网络与最大流问题 512

10.5.1算法描述与分析 512

10.5.2程序实现 521

10.5.3应用 523

第11章 代码实验 528

11.1头文件清单 528

11.1.1基本应用类函数 528

11.1.2数据结构类 531

11.1.3代数记算类函数 534

11.1.4计算几何类函数 536

11.1.5数论计算类函数 537

11.1.6回溯搜索类函数 539

11.1.7动态规划类函数 540

11.1.8贪婪策略类函数 540

11.1.9图的搜索类函数 541

11.2实验平台的搭建 542

11.2.1集成开发环境的安装 542

11.2.2实验项目的建立 542

11.3应用问题程序的运行实例 544

11.3.1加载程序文件 544

11.3.2调试程序 545

11.3.3各应用问题加载文件清单 546

11.4函数库的扩展 554

11.4.1向已有的源文件中添加新函数 554

11.4.2创建新的源文件 555

参考文献 557