算法设计与应用
出版信息
迈克尔 T. 古德里奇(Michael T. Goodrich)、罗伯特·塔马契亚(Roberto Tamas / 乔海燕、李悫炜、王烁程 / 机械工业出版社 / 2017-11-20 / CNY 139.00
内容简介
本书全面系统地介绍算法设计和算法应用的各个领域,内容涵盖经典数据结构、经典算法、算法分析方法、算法设计方法以及算法在各个领域的应用,还包含一些高级主题。本书采用应用驱动的方法引入各章内容,内容编排清晰合理,讲解由浅入深。此外,各章都附有巩固练习、创新练习和应用练习三种类型的题目,为读者理解和掌握算法设计和应用提供了很好的素材。
本书可作为高等院校计算机及相关专业“数据结构和算法”课程的本科生、研究生教材,也可作为算法理论和实践工作者的参考手册。
作者简介
迈克尔T.古德里奇(Michael T.Goodrich),加州大学欧文分校计算机科学系首席教授,在这之前他是约翰霍普金斯大学的教授。他的研究兴趣包括算法的分析、设计和实现,以及数据安全、云计算、绘图和计算几何。他是AAAS.ACM和IEEE会士,曾荣获IEEE计算机协会技术成就奖和ACM卓越服务奖等。
罗伯托·塔马西亚(Roberto Tamassia),布朗大学计算机科学系Plastech教授,布朗几何计算中心主任。他的研究兴趣包括数据安全、应用密码学、云计算、算法、绘图,以及计算几何的分析、设计和实现。他是AAAS、ACM和IEEE会士,曾荣获IEEE计算机协会技术成就奖。
目录
出版者的话
译者序
前言
第1章算法分析
1.1分析算法
1.1.1伪代码
1.1.2随机存取机模型
1.1.3基本操作数目的计算
1.1.4递归算法的分析
1.1.5渐近表示法
1.1.6渐近表示法的重要性
1.2相关数学知识复习
1.2.1求和
1.2.2对数和幂
1.2.3简单的证明技术
1.2.4概率基础
1.3算法分析案例
1.3.1最大子数组问题的第一个解
1.3.2一种改进的求最大子数组算法
1.3.3线性时间的最大子数组算法
1.4平摊分析
1.4.1平摊技术
1.4.2对一个可扩展数组实现的分析
1.5练习
本章注记
第一部分数据结构
第2章基本数据结构
2.1栈和队列
2.1.1栈
2.1.2队列
2.2列表
2.2.1基于索引的列表
2.2.2链表
2.3树
2.3.1树的定义
2.3.2树的遍历
2.3.3二叉树
2.3.4表示树的数据结构
2.4练习
本章注记
第3章二叉搜索树
3.1搜索和更新
3.1.1二叉搜索树的定义
3.1.2二叉搜索树中的搜索
3.1.3二叉搜索树中的插入
3.1.4二叉搜索树中的删除
3.1.5二叉搜索树的性能
3.2范围查询
3.3基于索引的搜索
3.4随机构造二叉搜索树
3.5练习
本章注记
第4章平衡二叉搜索树
4.1秩和旋转
4.2AVL树
4.3红黑树
4.4弱AVL树
4.5伸展树
4.6练习
本章注记
第5章优先队列和堆
5.1优先队列
5.2PQ排序、选择排序和插入排序
5.2.1选择排序
5.2.2插入排序
5.3堆
5.3.1基于数组结构的二叉树
5.3.2堆中的插入
5.3.3堆中的删除
5.4堆排序
5.5扩展优先队列
5.6练习
本章注记
第6章散列表
6.1映射
6.1.1映射的定义
6.1.2查找表
6.2散列函数
6.2.1分量求和
6.2.2多项式求值函数
6.2.3基于表格的散列
6.2.4取模
6.2.5随机线性和多项式函数
6.3碰撞处理与再散列
6.3.1拉链法
6.3.2开放寻址法
6.3.3线性探测
6.3.4平方探测
6.3.5双重散列
6.3.6再散列
6.4布谷鸟散列
6.5通用散列
6.6练习
本章注记
第7章并查集结构
7.1并查集及其应用
7.1.1连通分支
7.1.2迷宫建筑和渗透理论
7.2基于列表的实现
7.3基于树的实现
7.4练习
本章注记
第二部分排序和选择
第8章归并排序和快速排序
8.1归并排序
8.1.1分而治之
8.1.2归并排序和递推方程
8.2快速排序
8.2.1随机快速排序
8.2.2原地快速排序
8.3基于比较的排序的下界
8.4练习
本章注记
第9章快速排序和选择
9.1桶排序和基数排序
9.1.1桶排序
9.1.2基数排序
9.2选择
9.2.1随机快速选择
9.2.2确定性选择
9.3加权中位数
9.4练习
本章注记
第三部分基本技术
第10章贪心法
10.1分份背包问题
10.2任务调度
10.3文本压缩和哈夫曼编码
10.4练习
本章注记
第11章分治法
11.1递推与主定理
11.2整数乘法
11.3矩阵乘法
11.4极大点集问题
11.5练习
本章注记
第12章动态规划
12.1矩阵连乘
12.2通用技术
12.3望远镜调度
12.4博弈策略
12.4.1硬币行
12.4.2概率博弈策略与逆向归纳法
12.5最长公共子序列问题
12.5.1问题定义
12.5.2应用动态规划解LCS问题
12.60-1背包问题
12.7练习
本章注记
第13章图及遍历
13.1图的术语和表示方法
13.1.1图的一些术语
13.1.2图的操作
13.1.3表示图的数据结构
13.2深度优先搜索
13.3广度优先搜索
13.4有向图
13.4.1遍历有向图
13.4.2传递闭包
13.4.3有向DFS和垃圾回收
13.4.4有向无环图
13.5双连通分量
13.6练习
本章注记
第四部分图算法
第14章最短路径
14.1单源最短路径
14.2Dijkstra算法
14.3BellmanFord 算法
14.4有向无环图中的最短路径
14.5所有顶点对之间的最短路径
14.5.1动态规划最短路径算法
14.5.2通过矩阵乘法计算最短路径
14.6练习
本章注记
第15章最小生成树
15.1最小生成树的性质
15.2Kruskal算法
15.3PrimJarník算法
15.4Baruvka算法
15.5练习
本章注记
第16章网络流和匹配
16.1流与割
16.1.1割
16.1.2剩余容量和增流路径
16.2最大流算法
16.2.1FordFulkerson算法
16.2.2EdmondsKarp算法
16.3最大二分图匹配
16.4棒球赛的淘汰
16.5最低成本流
16.6练习
本章注记
第五部分计算困难问题
第17章NP完全性
17.1P和NP
17.1.1定义复杂类P和NP
17.1.2一些有趣的NP问题
17.2NP完全性
17.2.1多项式时间归约和NP难度
17.2.2CookLevin 定理
17.2.3如何证明一个问题是NP完全问题
17.3合取范式可满足问题和3可满足问题
17.4顶点覆盖、团和集合覆盖
17.5子集和与背包问题
17.6哈密顿回路和TSP
17.7练习
本章注记
第18章近似算法
18.1几何旅行商问题
18.1.1MetricTSP的一个2近似算法
18.1.2Christofides近似算法
18.2覆盖问题的近似
18.2.1顶点覆盖的2近似算法
18.2.2集合覆盖的对数近似
18.3多项式时间近似方法
18.4回溯和分支定界
18.4.1回溯法
18.4.2分支定界法
18.5练习
本章注记
第六部分高级主题
第19章随机算法
19.1随机排列的生成
19.2稳定婚姻和优惠券收集
19.2.1优惠券收集问题分析
19.2.2稳定婚姻问题
19.3最小割
19.3.1收缩边
19.3.2计算最小割
19.3.3更快的算法
19.4寻找素数
19.5切尔诺夫界
19.5.1马尔可夫不等式
19.5.2示性随机变量之和
19.5.3几何型随机变量之和
19.6跳跃表
19.6.1搜索
19.6.2更新操作
19.6.3跳跃表的概率分析
19.7练习
本章注记
第20章B树和外部存储器
20.1外部存储器
20.2(2,4)树和B树
20.2.1多叉搜索树
20.2.2(2,4)树
20.2.3(a,b)树和B树
20.3外部存储器排序
20.4在线缓存算法
20.5练习
本章注记
第21章多维搜索
21.1范围树
21.2优先搜索树
21.2.1构造优先搜索树
21.2.2在优先搜索树中搜索
21.2.3优先范围树
21.3四叉树和kd树
21.3.1四叉树
21.3.2kd树
21.4练习
本章注记
第22章计算几何
22.1几何对象上的操作
22.2凸壳
22.2.1礼品包装算法
22.2.2Graham扫描算法
22.3线段相交
22.4求最近点对
22.5练习
本章注记
第23章字符串算法
23.1字符串操作
23.2BoyerMoore 算法
23.3KnuthMorrisPratt算法
23.4基于散列的词典匹配
23.5字典树
23.5.1标准字典树
23.5.2压缩字典树
23.5.3后缀字典树
23.5.4搜索引擎
23.6练习
本章注记
第24章密码学
24.1最大公约数
24.1.1一些初等数论知识
24.1.2欧几里得GCD算法
24.2模运算
24.2.1模幂运算
24.2.2模乘法逆
24.3加密操作
24.4RSA密码系统
24.5El Gamal密码系统
24.6练习
本章注记
第25章快速傅里叶变换
25.1卷积
25.2原始单位根
25.3离散傅里叶变换
25.4快速傅里叶变换算法
25.5练习
本章注记
第26章线性规划
26.1定义问题
26.2单纯形法
26.2.1松弛型
26.2.2扩展的例子
26.2.3单纯形算法
26.3对偶
26.4线性规划的应用
26.5练习
本章注记
附录A一些有用的数学知识
参考文献