商品详情
书名:算法详解四部曲:算法详解 卷1 算法基础+算法详解 卷2 图算法和数据结构(套装2册)
定价:98.0
ISBN:9787115803948
作者:蒂姆·拉夫加登
版次:第1版
出版时间:2019-10
内容提要:
9787115493521 算法详解 卷1 算法基础 49.00 9787115526038 算法详解 卷2 图算法和数据结构 49.00 《算法详解 卷1 算法基础》 算法是计算机科学领域*重要的基石之一。算法是程序的灵魂,只有掌握了算法,才能轻松地驾驭程序开发。 算法详解系列图书共有4卷,本书是*1卷——算法基础。本书共有6章,主要介绍了4个主题,它们分别是渐进性分析和大O表示法、分治算法和主方法、随机化算法以及排序和选择。附录A和附录B简单介绍了数据归纳法和离散概率的相关知识。本书的每一章均有小测验、章末习题和编程题,这为读者的自我检查以及进一步学习提供了较多的便利。 本书为对算法感兴趣的广大读者提供了丰富而实用的资料,能够帮助读者提升算法思维能力。本书适合计算机专业的高校教师和学生,想要培养和训练算法思维和计算思维的IT专业人士,以及在准备面试的应聘者和面试官阅读参考。 《算法详解 卷2 图算法和数据结构》 算法详解系列图书共有4卷,本书是*2卷—图算法和数据结构。本书共有6章,主要介绍了3个主题,分别是图的搜索和应用、*短路径以及数据结构。附录简单回顾了渐进性表示法。本书的每一章均有小测验、章末习题,这为读者的自我检查以及进一步学习提供了方便。 本书提供了丰富而实用的资料,能够帮助读者提升算法思维能力。本书适合计算机专业的高校教师和学生,想要培养和训练算法思维和计算思维的IT专业人士,以及正在准备面试的应聘者和面试官阅读参考。
作者简介:
蒂姆·拉夫加登(Tim Roughgarden)是斯坦福大学计算机科学系的教授,也是该校管理科学和工程系的客座教授,他从2004年开始教授和研究算法。本书是他的《算法详解》四部曲的*一卷,基于他从2012年开始定期举行的在线算法课程编写。
目录:
《算法详解 卷1 算法基础》
第 1章 绪论 1
1.1 为什么要学习算法 1
1.2 整数乘法 3
1.2.1 问题和解决方案 3
1.2.2 整数乘法问题 3
1.2.3 小学算法 4
1.2.4 操作数量的分析 5
1.2.5 还能做得更好吗 5
1.3 Karatsuba乘法 6
1.3.1 一个具体的例子 6
1.3.2 一种递归算法 7
1.3.3 Karatsuba乘法 9
1.4 MergeSort算法 11
1.4.1 推动力 11
1.4.2 排序 12
1.4.3 一个例子 13
1.4.4 伪码 14
1.4.5 Merge子程序 15
1.5 MergeSort算法分析 16
1.5.1 Merge的运行时间 17
1.5.2 MergeSort的运行时间 18
1.5.3 定理1.2的证明 19
1.5.4 小测验1.1~1.2的答案 23
1.6 算法分析的指导原则 23
1.6.1 第 1个原则:*坏情况分析 24
1.6.2 第 2个原则:全局分析 25
1.6.3 第3个原则:渐进性分析 26
1.6.4 什么是“快速”算法 27
1.7 本章要点 28
1.8 习题 29
挑战题 31
编程题 31
第 2章 渐进性表示法 32
2.1 要旨 32
2.1.1 推动力 32
2.1.2 *级思维 33
2.1.3 4个例子 34
2.1.4 小测验2.1~2.4的答案 38
2.2 大O表示法 40
2.2.1 文本定义 40
2.2.2 图形定义 40
2.2.3 数学定义 41
2.3 两个基本例子 42
2.3.1 k阶多项式是O(nk) 42
2.3.2 k阶多项式不是O(nk-1) 43
2.4 大Ω和大 表示法 44
2.4.1 大Ω表示法 44
2.4.2 大 表示法 45
2.4.3 小O表示法 46
2.4.4 渐进性表示法的来源 47
2.4.5 小测验2.5的答案 48
2.5 其他例子 48
2.5.1 在指数中添加一个常数 48
2.5.2 指数乘以一个常数 49
2.5.3 *大值vs.和 49
2.6 本章要点 50
2.7 习题 51
第3章 分治算法 53
3.1 分治法规范 53
3.2 以O(n log n)时间计数逆序对 54
3.2.1 问题 54
3.2.2 一个例子 54
3.2.3 协同筛选 55
3.2.4 穷举搜索法 55
3.2.5 分治法 56
3.2.6 *级算法 57
3.2.7 关键思路:站在MergeSort的肩膀上 57
3.2.8 重温Merge 58
3.2.9 Merge和分离逆序对 60
3.2.10 Merge_and_CountSplitInv 61
3.2.11 正确性 61
3.2.12 运行时间 62
3.2.13 小测验3.1~3.2的答案 62
3.3 Strassen的矩阵相乘算法 63
3.3.1 矩阵相乘 63
3.3.2 例子(n = 2) 64
3.3.3 简单算法 64
3.3.4 分治法 65
3.3.5 节省一个递归调用 67
3.3.6 细节 68
3.3.7 小测验3.3的答案 69
*3.4 O(n log n)时间的*近点对(Closest Pair)算法 70
3.4.1 问题 70
3.4.2 热身:1D情况 71
3.4.3 预处理 71
3.4.4 一种分治方法 72
3.4.5 一个微妙的变化 74
3.4.6 ClosestSplitPair 74
3.4.7 正确性 76
3.4.8 辅助结论3.3(a)的证明 77
3.4.9 辅助结论3.3(b)的证明 78
3.4.10 小测验3.4的答案 80
3.5 本章要点 80
3.6 习题 81
挑战题 81
编程题 82
第4章 主方法 83
4.1 重温整数乘法 83
4.1.1 RecIntMult算法 84
4.1.2 Karatsuba算法 84
4.1.3 比较递归过程 85
4.2 形式声明 86
4.2.1 标准递归过程 86
4.2.2 主方法的陈述和讨论 87
4.3 6个例子 88
4.3.1 重温MergeSort 89
4.3.2 二分搜索 89
4.3.3 整数乘法的递归算法 90
4.3.4 Karatsuba乘法 90
4.3.5 矩阵乘法 91
4.3.6 一个虚构的递归过程 92
4.3.7 小测验4.2~4.3的答案 93
*4.4 主方法的证明 94
4.4.1 前言 94
4.4.2 重温递归树 95
4.4.3 单层所完成的工作 96
4.4.4 各层累计 97
4.4.5 正义与邪恶:需要考虑3种情况 98
4.4.6 预告运行时间上界 99
4.4.7 *后的计算:第 一种情况 100
4.4.8 迂回之旅:几何级数 101
4.4.9 *后的计算:*二种情况和第三种情况 102
4.4.10 小测验4.4~4.5的答案 103
4.5 本章要点 103
4.6 习题 104
第5章 快速排序(QuickSort) 107
5.1 概述 107
5.1.1 排序 108
5.1.2 根据基准元素进行划分 108
5.1.3 *级描述 110
5.1.4 内容前瞻 110
5.2 围绕基准元素进行划分 111
5.2.1 简易方法 111
5.2.2 原地实现:*级计划 112
5.2.3 例子 113
5.2.4 Partition子程序的伪码 115
5.2.5 QuickSort的伪码 117
5.3 良好的基准元素的重要性 117
5.3.1 ChoosePivot的简单实现 118
5.3.2 ChoosePivot的过度实现 118
5.3.3 小测验5.1~5.2的答案 119
5.4 随机化的QuickSort 121
5.4.1 ChoosePivot的随机化实现 121
5.4.2 随机化QuickSort的运行时间 122
5.4.3 直觉:随机基准元素为什么很好 123
*5.5 随机化QuickSort的分析 124
5.5.1 预备工作 125
5.5.2 分解蓝图 126
5.5.3 应用蓝图 128
5.5.4 计算比较的概率 130
5.5.5 *后的计算 132
5.5.6 小测验5.3的答案 133
*5.6 排序需要 (n log n)的比较 134
5.6.1 基于比较的排序算法 134
5.6.2 具有更强前提的更快速排序 135
5.6.3 定理5.5的证明 136
5.7 本章要点 138
5.8 习题 139
挑战题 140
编程题 141
第6章 线性时间级的选择 142
6.1 RSelect算法 143
6.1.1 选择问题 143
6.1.2 简化为排序 144
6.1.3 分治法 145
6.1.4 RSelect的伪码 146
6.1.5 RSelect的运行时间 147
6.1.6 小测验6.1~6.2的答案 149
*6.2 RSelect的分析 150
6.2.1 根据阶段追踪进展 150
6.2.2 简化为掷硬币 151
6.2.3 综合结论 153
*6.3 DSelect算法 154
6.3.1 基本思路:中位的中位元素 154
6.3.2 DSelect的伪码 155
6.3.3 理解DSelect 156
6.3.4 DSelect的运行时间 157
*6.4 DSelect的分析 159
6.4.1 递归调用之外所完成的工作 159
6.4.2 一个粗略的递归过程 159
6.4.3 30-70辅助结论 160
6.4.4 解析递归过程 163
6.4.5 先猜后验方法 164
6.5 本章要点 166
6.6 本章习题 166
挑战题 167
编程题 168
附录A 快速回顾数学归纳法 169
附录B 快速回顾离散概率 173
《算法详解 卷2 图算法和数据结构》
*1章 图的基础知识 1
1.1 基本术语 1
1.2 图的一些应用 2
1.3 图形的度量 3
1.3.1 图的边数量 3
1.3.2 稀疏图和稠密图 4
1.3.3 小测验1.1的答案 5
1.4 图的表示方法 7
1.4.1 邻接列表 7
1.4.2 邻接矩阵 8
1.4.3 图的表示形式之间的比较 9
1.4.4 小测验1.2和小测验1.3的答案 10
1.5 本章要点 11
1.6 章末习题 12
*2章 图的搜索及其应用 14
2.1 概述 14
2.1.1 一些应用 15
2.1.2 零代价的基本算法 16
2.1.3 通用的图搜索算法 17
2.1.4 宽度优先的搜索和深度优先的搜索 20
2.1.5 GenericSearch算法的正确性 22
2.2 宽度优先的搜索和*短路径 23
2.2.1 高层思路 23
2.2.2 BFS的伪码 24
2.2.3 BFS的一个例子 25
2.2.4 正确性和运行时间 27
2.2.5 *短路径 28
2.2.6 小测验2.1的答案 31
2.3 计算连通分量 32
2.3.1 连通分量 32
2.3.2 连通分量的应用 33
2.3.3 UCC(无向图连通分量)算法 34
2.3.4 UCC算法的一个例子 35
2.3.5 UCC算法的正确性和运行时间 36
2.3.6 小测验2.2的答案 37
2.4 深度优先的搜索 37
2.4.1 DFS的一个例子 37
2.4.2 DFS的伪码 39
2.4.3 正确性和运行时间 41
2.5 拓扑排序 41
2.5.1 拓扑顺序 41
2.5.2 什么时候存在拓扑顺序 43
2.5.3 计算拓扑顺序 45
2.5.4 通过DFS的拓扑排序 46
2.5.5 拓扑排序的一个例子 47
2.5.6 正确性和运行时间 48
2.5.7 小测验2.3和小测验2.4的答案 49
*2.6 计算强连通分量 50
2.6.1 强连通分量的定义 50
2.6.2 为什么要使用深度优先的搜索 52
2.6.3 为什么要使用反转的图 53
2.6.4 Kosaraju的伪码 57
2.6.5 一个例子 59
2.6.6 正确性和运行时间 60
2.6.7 小测验2.5和小测验2.6的答案 60
2.7 Web的结构 61
2.7.1 Web图 62
2.7.2 蝴蝶结 63
2.7.3 主要发现 64
2.8 本章要点 65
2.9 章末习题 65
第3章 Dijkstra*短路径算法 70
3.1 单源*短路径问题 70
3.1.1 问题定义 70
3.1.2 一些前提条件 72
3.1.3 为什么不使用宽度优先的搜索 72
3.1.4 小测验3.1的答案 73
3.2 Dijkstra算法 74
3.2.1 伪码 74
3.2.2 一个例子 76
*3.3 为什么Dijkstra算法是正确的 77
3.3.1 一种虚假的简化 77
3.3.2 Dijkstra算法的一个糟糕例子 78
3.3.3 非负边长时的正确性 78
3.4 算法的实现及其运行时间 82
3.5 本章要点 84
3.6 章末习题 84
第4章 堆数据结构 88
4.1 数据结构概述 88
4.1.1 选择正确的数据结构 88
4.1.2 进入更高层次 89
4.2 堆所支持的操作 90
4.2.1 Insert和ExtractMin 91
4.2.2 其他操作 92
4.3 堆的应用 93
4.3.1 应用:排序 93
4.3.2 应用:事件管理器 96
4.3.3 应用:中位值维护 96
4.4 Dijkstra算法的提速 98
4.4.1 为什么要使用堆 98
4.4.2 计划 99
4.4.3 维持不变性 101
4.4.4 运行时间 103
*4.5 实现细节 104
4.5.1 树形式的堆 104
4.5.2 数组形式的堆 106
4.5.3 在O (log n)时间内实现Insert操作 107
4.5.4 在O (log n)时间内实现ExtractMin操作 111
4.6 本章要点 114
4.7 章末习题 114
第5章 搜索树 117
5.1 有序数组 117
5.1.1 有序数组支持的操作 117
5.1.2 有序数组不支持的操作 119
5.2 搜索树支持的操作 120
*5.3 实现细节 122
5.3.1 搜索树的属性 122
5.3.2 搜索树的高度 123
5.3.3 在O(高度)时间内实现Search 124
5.3.4 在O(高度)时间内实现Min和Max 125
5.3.5 在O(高度)时间内实现Predecessor 126
5.3.6 在O(n)时间内实现OutputSorted操作 127
5.3.7 在O(高度)时间内实现Insert操作 128
5.3.8 在O(高度)时间内实现Delete操作 129
5.3.9 强化的搜索树支持Select操作 132
5.3.10 小测验5.1的答案 134
*5.4 平衡搜索树 134
5.4.1 努力实现更好的平衡 134
5.4.2 旋转 135
5.5 本章要点 137
5.6 章末习题 138
第6章 散列表和布隆过滤器 140
6.1 支持的操作 140
6.2 散列表的应用 143
6.2.1 应用:消除重复 144
6.2.2 应用:两数之和问题 145
6.2.3 应用:搜索巨大的状态空间 147
6.2.4 小测验6.2的答案 148
*6.3 实现的高层思路 148
6.3.1 两个简单的解决方案 148
6.3.2 散列函数 149
6.3.3 冲突是不可避免的 150
6.3.4 解决冲突的方法:链地址法 152
6.3.5 解决冲突的方法:开放地址法 153
6.3.6 良好的散列函数是怎么样的 156
6.3.7 小测验6.3到小测验6.5的答案 160
*6.4 更多的实现细节 162
6.4.1 负载和性能 162
6.4.2 管理散列表的负载 164
6.4.3 选择散列函数 165
6.4.4 选择冲突解决策略 166
6.4.5 小测验6.6的答案 166
6.5 布隆过滤器的基础知识 166
6.5.1 布隆过滤器支持的操作 167
6.5.2 布隆过滤器的应用 169
6.5.3 布隆过滤器的实现 169
*6.6 布隆过滤器的启发式分析 172
6.6.1 启发式假设 172
6.6.2 部分位被设置为1 174
6.6.3 假阳性率 175
6.6.4 结束语 176
6.6.5 小测验6.7的答案 177
6.7 本章要点 178
6.8 章末习题 179
附录 快速回顾渐进性表示法 181
部分习题答案 187
- 人民邮电出版社有限公司 (微信公众号认证)
- 人民邮电出版社微店,为您提供最全面,最专业的一站式购书服务
- 扫描二维码,访问我们的微信店铺
- 随时随地的购物、客服咨询、查询订单和物流...