
作者:(美)古德里奇,(美)塔玛西亚著,霍红卫译
ISBN:10位[7115150540] 13位[9787115150547]
出版社:人民邮电出版社
出版日期:2006-10-1
定价:¥55.00 元
内容提要
本书系统地阐述了算法设计的方法、技术和应用实例。全书内容包括基础算法、基本数据结构、基本算法设计技术、图算法、网络流和匹配、文本处理算法、数论算法、网络算法、NP完全性、近似算法、回溯法和分枝限界法、外存算法、并行算法和在线算法。Java实现示例覆盖了软件设计方法、面向对象实现问题和算法的实验性分析。这些典型问题的Java应用示例分布在不同的章节中。此外,书中以大量图例说明算法的工作过程,使算法更加易于理解和掌握。
本书适合作为高等院校计算机专业本科生和研究生算法设计课程的教材,也可作为从事软件开发和工程设计的专业人员的参考书。此外,算法爱好者和参加各种程序设计大赛的选手也可把本书作为参考用书。
编辑推荐
本书系统地阐述了算法设计的方法、技术和应用实例。全书内容包括基础算法、基本数据结构、基本算法设计技术、图算法、网络流和匹配、文本处理算法、数论算法、网络算法、NP完全性、近似算法、回溯法和分枝限界法、外存算法、并行算法和在线算法。Java实现示例覆盖了软件设计方法、面向对象实现问题和算法的实验性分析。这些典型问题的Java应用示例分布在不同的章节中。此外,书中以大量图例说明算法的工作过程,使算法更加易于理解和掌握。
作者简介
Michael T.Goodrich,1987年从普度大学获得计算机科学博士学位,目前是加州大学(欧文分校)信息和计算机科学学院计算机系教授。此前,他曾担任约翰·霍普金斯大学计算机科学系的教授,同时担任该校算法工程中心主任。Goodrich教授的主要研究方向是高性能算法设计、数据结构求解的大规模问题、因特网、信息可视化和几何计算等。
目录
第一部分基础工具
第1章算法分析
1.1算法的分析方法学
1.1.1伪代码
1.1.2随机存取机(RAM)模型
1.1.3统计基本操作的数量
1.1.4递归算法分析
1.2渐近符号
1.2.1大O符号
1.2.2与大“O”相关的渐近符号
1.2.3渐近表示的重要性
1.3数学概览
1.3.1求和
1.3.2对数和指数
1.3.3简单证明技术
1.3.4概率基础
1.4算法分析案例研究
1.4.1二次时间前缀平均值算法
1.4.2线性时间前缀平均值算法
1.5平摊方法
1.5.1平摊技术
1.5.2扩展数组实现分析
1.6实验
1.6.1实验组织
1.6.2数据分析和可视化
1.7习题
基础题
创新题
程序设计
1.8本章注记
第2章基本数据结构
2.1栈和队列
2.1.1栈
2.1.2队列
2.2向量、表和序列
2.2.1向量
2.2.2表
2.2.3序列
2.3树
2.3.1树抽象数据类型
2.3.2树的遍历
2.3.3二叉树
2.3.4表示树的数据结构
2.4优先队列和堆
2.4.1优先队列抽象数据类型
2.4.2PQ排序、选择排序和插入排序
2.4.3堆数据结构
2.4.4堆排序
2.5字典与散列表
2.5.1无序字典ADT
2.5.2散列表
2.5.3散列函数
2.5.4压缩映射
2.5.5冲突处理模式
2.5.6通用散列
2.6Java示例:堆
2.7习题
基础题
创新题
程序设计
2.8本章注记
第3章查找树和跳跃表
3.1有序字典和二叉查找树
3.1.1有序表
3.1.2二叉查找树
3.1.3二叉查找树中的查找
3.1.4二叉查找树中的插入
3.1.5二叉查找树中的删除
3.1.6二叉查找树的性能
3.2AVL树
3.2.1更新操作
3.2.2性能
3.3深度有界查找树
3.3.1多路查找树
3.3.2(2,4)树
3.3.3红黑树
3.4伸展树
3.4.1伸展
3.4.2伸展过程的平摊分析
3.5跳跃表
3.5.1查找
3.5.2更新操作
3.5.3跳跃表的概率分析
3.6Java示例:AVL树和红黑树
3.6.1AVL树的Java实现
3.6.2红黑树的Java实现
3.7习题
基础题
创新题
程序设计
3.8本章注记
第4章排序、集合和选择
4.1归并排序
4.1.1分治法
4.1.2归并排序和递归方程
4.2集合抽象数据类型
4.2.1简单的集合实现
4.2.2具有union-find操作的划分
4.2.3基于树的划分实现
4.3快速排序
4.4基于比较的排序下界
4.5桶排序和基数排序
4.5.1桶排序
4.5.2基数排序
4.6比较排序算法
4.7选择
4.7.1剪枝-查找法
4.7.2随机化快速选择
4.7.3随机化快速选择分析
4.8Java示例:原位快速排序
4.9习题
基础题
创新题
程序设计
4.10本章注记
第5章基本技术
5.1贪心法
5.1.1背包问题
5.1.2任务调度
5.2分治法
5.2.1分治递归方程
5.2.2整数相乘
5.2.3矩阵相乘
5.3动态规划
5.3.1矩阵链乘
5.3.2一般技术
5.3.30-1背包问题
5.4习题
基础题
创新题
程序设计
5.5本章注记
第二部分图算法
第6章图
6.1图抽象数据类型
6.2图的数据结构
6.2.1边表结构
6.2.2邻接表结构
6.2.3邻接矩阵结构
6.3图的遍历
6.3.1深度优先查找
6.3.2双连通分量
6.3.3广度优先查找
6.4有向图
6.4.1遍历有向图
6.4.2传递闭包
6.4.3DFS和垃圾收集
6.4.4有向无环图
6.5Java示例:深度优先查找
6.5.1修饰模式
6.5.2DFS引擎
6.5.3模板方法设计模式
6.6习题
基础题
创新题
程序设计
6.7本章注记
第7章加权图
7.1单源点最短路径
7.1.1Dijkstra算法
7.1.2Bellman-Ford最短路径算法
7.1.3有向无环图中的最短路径
7.2所有顶点对之间的最短路径
7.2.1动态规划最短路径算法
7.2.2利用矩阵相乘计算最短路径
7.3最小生成树
7.3.1Kruskal算法
7.3.2Prim-Jarník算法
7.3.3Bar?vka算法
7.3.4MST算法比较
7.4Java示例:Dijkstra算法
7.5习题
基础题
创新题
程序设计
7.6本章注记
第8章网络流和匹配
8.1流和割
8.1.1流网络
8.1.2割
8.2最大流
8.2.1剩余容量和增大路径
8.2.2Ford-Fulkerson算法
8.2.3Ford-Fulkerson算法分析
8.2.4Edmonds-Karp算法
8.3最大二分匹配
8.4最小代价流
8.4.1增大回路
8.4.2连续最短路径
8.4.3修改权值
8.5Java示例:最小代价流
8.6习题
基础题
创新题
程序设计
8.7本章注记
第三部分因特网算法
第9章文本处理
9.1串和模式匹配算法
9.1.1串操作
9.1.2蛮力模式匹配
9.1.3Boyer-Moore算法
9.1.4Knuth-Morris-Pratt算法
9.2trie
9.2.1标准trie
9.2.2压缩trie
9.2.3后缀trie
9.2.4搜索引擎
9.3文本压缩
9.3.1赫夫曼编码算法
9.3.2修正贪心法
9.4文本相似性测试
9.4.1最长公共子序列问题
9.4.2应用动态规划求解LCS问题
9.5习题
基础题
创新题
程序设计
9.6本章注记
第10章数论和密码学
10.1与数有关的基本算法
10.1.1基本数论的一些事实
10.1.2欧几里得GCD算法
10.1.3模运算
10.1.4模指数运算
10.1.5模乘法逆元
10.1.6素性测试
10.2密码计算
10.2.1对称加密模式
10.2.2公钥密码系统
10.2.3RSA密码系统
10.2.4El Gamal密码系统
10.3信息安全算法和协议
10.3.1单向散列函数
10.3.2时间戳和认证字典
10.3.3硬币抛掷和比特承诺
10.3.4安全电子传输(SET)协议
10.3.5密钥分发和交换
10.4快速傅里叶变换
10.4.1本原单位根
10.4.2离散傅里叶变换
10.4.3快速傅里叶变换算法
10.4.4大整数相乘
10.5Java示例:FFT
10.6习题
基础题
创新题
程序设计
10.7本章注记
第11章网络算法
11.1复杂性测度和模型
11.1.1网络协议栈
11.1.2消息传递模型
11.1.3网络算法的复杂性测度
11.2基本分布式算法
11.2.1环网上的领导人选举
11.2.2树网上的领导人选举
11.2.3广度优先查找
11.2.4最小生成树
11.3广播路由和单播路由
11.3.1广播路由的洪泛算法
11.3.2单播路由的距离矢量算法
11.3.3单播路由的链路-状态算法
11.4多播路由
11.4.1逆向路径转发
11.4.2中心树
11.4.3Steiner树
11.5习题
基础题
创新题
程序设计
11.6本章注记
第四部分其他主题
第12章计算几何
12.1范围树
12.1.1一维范围查找
12.1.2二维范围查找
12.2优先查找树
..