算法导论

🌙
手机阅读
本文目录结构

算法导论

内容简介

在有关算法的书中,有一些叙述非常严谨,但不够全面;另一些涉及了大量的题材,但又缺乏严谨性。《算法导论(原书第 3 版)/ 计算机科学丛书》将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。全书各章自成体系,可以作为独立的学习单元;算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。

《算法导论(原书第 3 版)/ 计算机科学丛书》全书选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是非常实用的教材,在 IT 专业人员的职业生涯中,《算法导论(原书第 3 版)/ 计算机科学丛书》也是一本案头必备的参考书或工程实践手册。

第 3 版的主要变化:

  • 新增了 van Emde Boas 树和多线程算法,并且将矩阵基础移至附录。
  • 修订了递归式(现在称为“分治策略”)那一章的内容,更广泛地覆盖分治法。
  • 移除两章很少讲授的内容:二项堆和排序网络。
  • 修订了动态规划和贪心算法相关内容。
  • 流网络相关材料现在基于边上的全部流。
  • 由于关于矩阵基础和 Strassen 算法的材料移到了其他章,矩阵运算这一章的内容所占篇幅更小。
  • 修改了对 Knuth-Morris-Pratt 字符串匹配算法的讨论。
  • 新增 100 道练习和 28 道思考题,还更新并补充了参考文献。

作者简介

Thomas H. Cormen (托马斯·科尔曼),达特茅斯学院计算机科学系教授、系主任。目前的研究兴趣包括:算法工程、并行计算、具有高延迟的加速计算。他分别于 1993 年、1986 年获得麻省理工学院电子工程和计算机科学博士、硕士学位,师从 Charles E. Leiserson 教授。由于他在计算机教育领域的突出贡献,Cormen 教授荣获 2009 年 ACM 杰出教员奖。

Charles E. Leiserson(查尔斯·雷瑟尔森),麻省理工学院计算机科学与电气工程系教授,Margaret MacVicar Faculty Fellow。他目前主持 MIT 超级计算技术研究组,并是 MIT 计算机科学和人工智能实验室计算理论研究组的成员。他的研究兴趣集中在并行和分布式计算的理论原理,尤其是与工程现实相关的技术研究。Leiserson 教授拥有卡内基·梅隆大学计算机科学博士学位,还是 ACM、IEEE 和 SIAM 的会士。

Ronald L. Rivest (罗纳德·李维斯特),现任麻省理工学院电子工程和计算机科学系安德鲁与厄纳·维特尔比(Andrew and Erna Viterbi)教授。他是 MIT 计算机科学和人工智能实验室的成员,并领导着其中的信息安全和隐私中心。他 1977 年从斯坦福大学获得计算机博士学位,主要从事密码安全、计算机安全算法的研究。他和 Adi Shamir 和 Len Adleman 一起发明了 RSA 公钥算法,这个算法在信息安全中获得大的突破,这一成果也使他和 Shamir、Adleman 一起得到 2002 年 ACM 图灵奖。他现在担任国家密码学会的负责人。

Clifford Stein(克利福德·斯坦),哥伦比亚大学计算机科学系和工业工程与运筹学系教授,他还是工业工程与运筹学系的系主任。在加入哥伦比亚大学大学之前,他在达特茅斯学院计算机科学系任教 9 年。Stein 教授拥有 MIT 硕士和博士学位。他的研究兴趣包括:算法的设计与分析,组合优化、运筹学、网络算法、调度、算法工程和生物计算。

目录

  • 出版者的话
  • 译者序
  • 前言

第一部分 基础知识

第 1 章 算法在计算中的作用

  • 1.1 算法
  • 1.2 作为一种技术的算法
  • 思考题
  • 本章注记

第 2 章 算法基础

  • 2.1 插入排序
  • 2.2 分析算法
  • 2.3 设计算法
  • 2.3.1 分治法
  • 2.3.2 分析分治算法
  • 思考题
  • 本章注记

第 3 章 函数的增长

  • 3.1 渐近记号
  • 3.2 标准记号与常用函数
  • 思考题
  • 本章注记

第 4 章 分治策略

  • 4.1 最大子数组问题
  • 4.2 矩阵乘法的 Strassen 算法
  • 4.3 用代入法求解递归式
  • 4.4 用递归树方法求解递归式
  • 4.5 用主方法求解递归式
  • 4.6 证明主定理
  • 4.6.1 对 b 的幂证明主定理
  • 4.6.2 向下取整和向上取整
  • 思考题
  • 本章注记

第 5 章 概率分析和随机算法

  • 5.1 雇用问题
  • 5.2 指示器随机变量
  • 5.3 随机算法
  • 5.4 概率分析和指示器随机变量的进一步使用
  • 5.4.1 生日悖论
  • 5.4.2 球与箱子
  • 5.4.3 特征序列
  • 5.4.4 在线雇用问题
  • 思考题
  • 本章注记

第二部分 排序和顺序统计量

第 6 章 堆排序

  • 6.1 堆
  • 6.2 维护堆的性质
  • 6.3 建堆
  • 6.4 堆排序算法
  • 6.5 优先队列
  • 思考题
  • 本章注记

第 7 章 快速排序

  • 7.1 快速排序的描述
  • 7.2 快速排序的性能
  • 7.3 快速排序的随机化版本
  • 7.4 快速排序分析
  • 7.4.1 最坏情况分析
  • 7.4.2 期望运行时间
  • 思考题
  • 本章注记

第 8 章 线性时间排序

  • 8.1 排序算法的下界
  • 8.2 计数排序
  • 8.3 基数排序
  • 8.4 桶排序
  • 思考题
  • 本章注记

第 9 章 中位数和顺序统计量

  • 9.1 最小值和最大值
  • 9.2 期望为线性时间的选择算法
  • 9.3 最坏情况为线性时间的选择算法
  • 思考题
  • 本章注记

第三部分 数据结构

第 10 章 基本数据结构

  • 10.1 栈和队列
  • 10.2 链表
  • 10.3 指针和对象的实现
  • 10.4 有根树的表示
  • 思考题
  • 本章注记

第 11 章 散列表

  • 11.1 直接寻址表
  • 11.2 散列表
  • 11.3 散列函数
  • 11.3.1 除法散列法
  • 11.3.2 乘法散列法
  • 11.3.3 全域散列法
  • 11.4 开放寻址法
  • 11.5 完全散列
  • 思考题
  • 本章注记

第 12 章 二叉搜索树

  • 12.1 什么是二叉搜索树
  • 12.2 查询二叉搜索树
  • 12.3 插入和删除
  • 12.4 随机构建二叉搜索树
  • 思考题
  • 本章注记

第 13 章 红黑树

  • 13.1 红黑树的性质
  • 13.2 旋转
  • 13.3 插入
  • 13.4 删除
  • 思考题
  • 本章注记

第 14 章 数据结构的扩张

  • 14.1 动态顺序统计
  • 14.2 如何扩张数据结构
  • 14.3 区间树
  • 思考题
  • 本章注记

第四部分 高级设计和分析技术

第 15 章 动态规划

  • 15.1 钢条切割
  • 15.2 矩阵链乘法
  • 15.3 动态规划原理
  • 15.4 最长公共子序列
  • 15.5 最优二叉搜索树
  • 思考题
  • 本章注记

第 16 章 贪心算法

  • 16.1 活动选择问题
  • 16.2 贪心算法原理
  • 16.3 赫夫曼编码
  • 16.4 拟阵和贪心算法
  • 16.5 用拟阵求解任务调度问题
  • 思考题
  • 本章注记

第 17 章 摊还分析

  • 17.1 聚合分析
  • 17.2 核算法
  • 17.3 势能法
  • 17.4 动态表
  • 17.4.1 表扩张
  • 17.4.2 表扩张和收缩
  • 思考题
  • 本章注记

第五部分 高级数据结构

第 18 章 B 树

  • 18.1 B 树的定义
  • 18.2 B 树上的基本操作
  • 18.3 从 B 树中删除关键字
  • 思考题
  • 本章注记

第 19 章 斐波那契堆

  • 19.1 斐波那契堆结构
  • 19.2 可合并堆操作
  • 19.3 关键字减值和删除一个结点
  • 19.4 最大度数的界
  • 思考题
  • 本章注记

第 20 章 van Emde Boas 树

  • 20.1 基本方法
  • 20.2 递归结构
  • 20.2.1 原型 van Emde Boas 结构
  • 20.2.2 原型 van Emde Boas 结构上的操作
  • 20.3 van Emde Boas 树及其操作
  • 20.3.1 van Emde Boas 树
  • 20.3.2 van Emde Boas 树的操作
  • 思考题
  • 本章注记

第 21 章 用于不相交集合的数据结构

  • 21.1 不相交集合的操作
  • 21.2 不相交集合的链表表示
  • 21.3 不相交集合森林
  • *21.4 带路径压缩的按秩合并的分析
  • 思考题
  • 本章注记

第六部分 图算法

第 22 章 基本的图算法

  • 22.1 图的表示
  • 22.2 广度优先搜索
  • 22.3 深度优先搜索
  • 22.4 拓扑排序
  • 22.5 强连通分量
  • 思考题
  • 本章注记

第 23 章 最小生成树

  • 23.1 最小生成树的形成
  • 23.2 Kruskal 算法和 Prim 算法
  • 思考题
  • 本章注记

第 24 章 单源最短路径

  • 24.1 Bellman-Ford 算法
  • 24.2 有向无环图中的单源最短路径问题
  • 24.3 Dijkstra 算法
  • 24.4 差分约束和最短路径
  • 24.5 最短路径性质的证明
  • 思考题
  • 本章注记

第 25 章 所有结点对的最短路径问题

  • 25.1 最短路径和矩阵乘法
  • 25.2 FloydWarshall 算法
  • 25.3 用于稀疏图的 Johnson 算法
  • 思考题
  • 本章注记

第 26 章 最大流

  • 26.1 流网络
  • 26.2 Ford\Fulkerson 方法
  • 26.3 最大二分匹配
  • 26.4 推送重贴标签算法
  • 26.5 前置重贴标签算法
  • 思考题
  • 本章注记

第七部分 算法问题选编

第 27 章 多线程算法

  • 27.1 动态多线程基础
  • 27.2 多线程矩阵乘法
  • 27.3 多线程归并排序
  • 思考题
  • 本章注记

第 28 章 矩阵运算

  • 28.1 求解线性方程组
  • 28.2 矩阵求逆
  • 28.3 对称正定矩阵和最小二乘逼近
  • 思考题
  • 本章注记

第 29 章 线性规划

  • 29.1 标准型和松弛型
  • 29.2 将问题表达为线性规划
  • 29.3 单纯形算法
  • 29.4 对偶性
  • 29.5 初始基本可行解
  • 思考题
  • 本章注记

第 30 章 多项式与快速傅里叶变换

  • 30.1 多项式的表示
  • 30.2 DFT 与 FFT
  • 30.3 高效 FFT 实现
  • 思考题
  • 本章注记

第 31 章 数论算法

  • 31.1 基础数论概念
  • 31.2 最大公约数
  • 31.3 模运算
  • 31.4 求解模线性方程
  • 31.5 中国余数定理
  • 31.6 元素的幂
  • 31.7 RSA 公钥加密系统
  • 31.8 素数的测试
  • 31.9 整数的因子分解
  • 思考题
  • 本章注记

第 32 章 字符串匹配

  • 32.1 朴素字符串匹配算法
  • 32.2 Rabin\Karp 算法
  • 32.3 利用有限自动机进行字符串匹配
  • 32.4 Knuth-Morris-Pratt 算法
  • 思考题
  • 本章注记

第 33 章 计算几何学

  • 33.1 线段的性质
  • 33.2 确定任意一对线段是否相交
  • 33.3 寻找凸包
  • 33.4 寻找最近点对
  • 思考题
  • 本章注记

第 34 章 NP 完全性

  • 34.1 多项式时间
  • 34.2 多项式时间的验证
  • 34.3 NP 完全性与可归约性
  • 34.4 NP 完全性的证明
  • 34.5 NP 完全问题
  • 34.5.1 团问题
  • 34.5.2 顶点覆盖问题
  • 34.5.3 哈密顿回路问题
  • 34.5.4 旅行商问题
  • 34.5.5 子集和问题
  • 思考题
  • 本章注记

第 35 章 近似算法

  • 35.1 顶点覆盖问题
  • 35.2 旅行商问题
  • 35.2.1 满足三角不等式的旅行商问题
  • 35.2.2 一般旅行商问题
  • 35.3 集合覆盖问题
  • 35.4 随机化和线性规划
  • 35.5 子集和问题
  • 思考题
  • 本章注记

第八部分 附录:数学基础知识

  • 附录 A 求和
  • A.1 求和公式及其性质
  • A.2 确定求和时间的界
  • 思考题
  • 附录注记
  • 附录 B 集合等离散数学内容
  • B.1 集合
  • B.2 关系
  • B.3 函数
  • B.4 图
  • B.5 树
  • B.5.1 自由树
  • B.5.2 有根树和有序树
  • B.5.3 二叉树和位置树
  • 思考题
  • 附录注记
  • 附录 C 计数与概率
  • C.1 计数
  • C.2 概率
  • C.3 离散随机变量
  • C.4 几何分布与二项分布
  • *C.5 二项分布的尾部
  • 思考题
  • 附录注记
  • 附录 D 矩阵
  • D.1 矩阵与矩阵运算
  • D.2 矩阵基本性质
  • 思考题
  • 附录注记
  • 参考文献
  • 索引

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了