E-BOOK
算法图解第二版
PDF
《算法图解第二版》[41M]百度网盘|pdf下载|亲测有效
📥 PDF 电子书 · 百度网盘 · 约 45M
📖 文轩网旗舰店
🌐 zh-CN
📅 Published 2,017
45
Downloads
4.8
Rating
68.0MB
File Size
PDF
📦 Download Book
- 算法学习枯燥:传统算法教材充满数学证明令人望而生畏,本书用400多张示意图让算法变得像小说一样有趣。
- 大O表示法难理解:对算法复杂度分析感到困惑,本书用直观对比帮助读者轻松理解不同算法性能差异。
- 算法与实战脱节:不知道算法如何应用到日常编程中,本书用Python代码示例展示实际问题的算法解决方案。
- 递归与动态规划难掌握:对递归、动态规划等抽象概念理解困难,本书通过背包问题、最长公共子串等案例逐步引导。
- 缺乏算法全景认知:不了解算法领域的整体面貌,本书从二分查找到K近邻、从贪婪算法到MapReduce全面覆盖。
★★★
Intermediate
BeginnerElementaryIntermediateAdvancedExpert
- 编程初学者:刚接触编程,希望以轻松有趣的方式建立算法基础,为后续深入学习打底。
- 非计算机专业转行者:缺乏算法系统训练,需要一本通俗易懂的入门书快速补齐短板。
- 在校学生:准备数据结构与算法课程或面试,需要直观图解辅助理解抽象概念。
- 面试求职者:需要复习常见算法与数据结构,通过图解快速唤醒记忆、理清思路。
- 自学编程爱好者:对算法感兴趣但畏惧数学证明,希望用Python代码直观感受算法魅力。
- 按章节顺序阅读:本书设计为由浅入深,建议从第1章开始逐章推进,打好基础再进阶。
- 重视图示理解:书中400多张示意图是理解算法的关键,建议仔细观看每张图的执行过程。
- 动手运行代码:每章Python代码示例建议亲自运行,观察不同输入下算法的执行结果。
- 完成课后练习:每章末尾的练习是检验理解程度的有效方式,建议认真完成并对照答案。
- 反复阅读难点章节:递归、动态规划和狄克斯特拉算法等章节建议多读几遍加深理解。
- 算法基础扎实:掌握二分查找、排序、递归、散列表、图搜索等核心算法的原理与应用。
- 复杂度分析能力:理解大O表示法,能够分析不同算法在时间和空间上的性能差异。
- Python算法实现:能够用Python编写常见算法,将算法思维应用到日常编程中。
- 问题解决技巧:学会分而治之、动态规划、贪婪算法等通用问题解决策略。
- 算法全景认知:了解从基础算法到机器学习、并行计算、MapReduce等前沿领域的全貌。
- 面试竞争力:具备应对技术面试中常见算法题的能力,提升求职竞争力。
📖 Book Introduction
作 者:(美)巴尔加瓦 著 袁国忠 译
定 价:69.8
出 版 社:人民邮电出版社
出版日期:2017年03月01日
页 数:196
装 帧:平装
ISBN:9787115447630
像小说一样有趣的算法入门书。
算法是解决问题的一步步流程,也是计算机科学领域的核心主题。如今程序员经常使用的算法已经经过了前人的探索、检验及证明。如果你想搞明白这些算法,又不想被困在繁琐的证明中,本书正是你的。这本图示丰富、引人入胜的实用指南将让你轻松学会如何在自己的程序中高效使用重要的算法。
你一定能看懂的算法基础书
代码示例基于Python
400多个示意图,生动介绍算法执行过程
展示不同算法在性能方面的优缺点
教会你用常见算法解决每天面临的实际编程问题
●章算法简介1
1.1引言1
1.1.1性能方面1
1.1.2问题解决技巧2
1.2二分查找2
1.2.1更佳的查找方式4
1.2.2运行时间8
1.3大O表示法8
1.3.1算法的运行时间以不同的速度增加9
1.3.2理解不同的大O运行时间10
1.3.3大O表示法指出了糟情况下的运行时间12
1.3.4一些常见的大O运行时间12
1.3.5旅行商13
1.4小结15
第2章选择排序16
2.1内存的工作原理16
2.2数组和链表18
2.2.1链表19
2.2.2数组20
2.2.3术语21
2.2.4在中间插入22
2.2.5删除23
2.3选择排序25
2.4小结28
第3章递归29
3.1递归29
3.2基线条件和递归条件32
3.3栈33
3.3.1调用栈34
3.3.2递归调用栈36
3.4小结40
第4章快速排序41
4.1分而治之41
4.2快速排序47
4.3再谈大O表示法52
4.3.1比较合并排序和快速排序53
4.3.2平均情况和糟情况54
4.4小结57
第5章散列表58
5.1散列函数60
5.2应用案例63
5.2.1将散列表用于查找63
5.2.2防止重复
5.2.3将散列表用作缓存66
5.2.4小结68
5.3冲突69
5.4性能71
5.4.1填装因子72
5.4.2良好的散列函数74
5.5小结75
第6章广度优先搜索76
6.1图简介77
6.2图是什么79
6.3广度优先搜索79
6.3.1查找短路径82
6.3.2队列83
实现图84
6.5实现算法86
6.6小结93
第7章狄克斯特拉算法94
7.1使用狄克斯特拉算法95
7.2术语98
7.3换钢琴100
7.4负权边105
7.5实现108
7.6小结116
第8章贪婪算法117
8.1教室调度问题117
8.2背包问题119
8.3集合覆盖问题121
8.4NP完全问题127
8.4.1旅行商问题详解127
8.4.2如何识别NP完全问题131
8.5小结133
第9章动态规划134
9.1背包问题134
9.1.1简单算法135
9.1.2动态规划136
9.2背包问题FAQ143
9.2.1再增加一件商品将如何呢143
9.2.2行的排列顺序发生变化时结果将如何145
9.2.3可以逐列而不是逐行填充网格吗146
9.2.4增加一件更小的商品将如何呢146
9.2.5可以偷商品的一部分吗146
9.2.6旅游行程优化147
9.2.7处理相互依赖的情况148
9.2.8计算终的解时会涉及以上的子背包吗148
9.2.9优解可能导致背包没装满吗149
9.3长公共子串149
9.3.1绘制网格150
9.3.2填充网格151
9.3.3揭晓答案152
9.3.4长公共子序列153
9.3.5长公共子序列之解决方案154
9.4小结155
0章K近邻算法156
10.1橙子还是柚子156
10.2创建推荐系统158
10.2.1特征抽取159
10.2.2回归162
10.2.3挑选合适的特征1
10.3机器学习简介165
10.3.1OCR165
10.3.2创建垃圾邮件过滤器166
10.3.3预测股票市场167
10.4小结167
1章接下来如何做168
11.1树168
11.2反向索引171
11.3傅里叶变换171
11.4并行算法172
11.5MapReduce173
11.5.1分布式算法为何很有用173
11.5.2映射函数173
11.5.3归并函数174
11.6布隆过滤器和HyperLogLog174
11.6.1布隆过滤器175
11.6.2HyperLogLog176
11.7SHA算法176
11.7.1比较文件177
11.7.2检查密码178
11.8局部敏感的散列算法178
11.9Diffie-Hellman密钥交换179
11.10线性规划180
11.11结语180
练习答案181
1.1引言1
1.1.1性能方面1
1.1.2问题解决技巧2
1.2二分查找2
1.2.1更佳的查找方式4
1.2.2运行时间8
1.3大O表示法8
1.3.1算法的运行时间以不同的速度增加9
1.3.2理解不同的大O运行时间10
1.3.3大O表示法指出了糟情况下的运行时间12
1.3.4一些常见的大O运行时间12
1.3.5旅行商13
1.4小结15
第2章选择排序16
2.1内存的工作原理16
2.2数组和链表18
2.2.1链表19
2.2.2数组20
2.2.3术语21
2.2.4在中间插入22
2.2.5删除23
2.3选择排序25
2.4小结28
第3章递归29
3.1递归29
3.2基线条件和递归条件32
3.3栈33
3.3.1调用栈34
3.3.2递归调用栈36
3.4小结40
第4章快速排序41
4.1分而治之41
4.2快速排序47
4.3再谈大O表示法52
4.3.1比较合并排序和快速排序53
4.3.2平均情况和糟情况54
4.4小结57
第5章散列表58
5.1散列函数60
5.2应用案例63
5.2.1将散列表用于查找63
5.2.2防止重复
5.2.3将散列表用作缓存66
5.2.4小结68
5.3冲突69
5.4性能71
5.4.1填装因子72
5.4.2良好的散列函数74
5.5小结75
第6章广度优先搜索76
6.1图简介77
6.2图是什么79
6.3广度优先搜索79
6.3.1查找短路径82
6.3.2队列83
实现图84
6.5实现算法86
6.6小结93
第7章狄克斯特拉算法94
7.1使用狄克斯特拉算法95
7.2术语98
7.3换钢琴100
7.4负权边105
7.5实现108
7.6小结116
第8章贪婪算法117
8.1教室调度问题117
8.2背包问题119
8.3集合覆盖问题121
8.4NP完全问题127
8.4.1旅行商问题详解127
8.4.2如何识别NP完全问题131
8.5小结133
第9章动态规划134
9.1背包问题134
9.1.1简单算法135
9.1.2动态规划136
9.2背包问题FAQ143
9.2.1再增加一件商品将如何呢143
9.2.2行的排列顺序发生变化时结果将如何145
9.2.3可以逐列而不是逐行填充网格吗146
9.2.4增加一件更小的商品将如何呢146
9.2.5可以偷商品的一部分吗146
9.2.6旅游行程优化147
9.2.7处理相互依赖的情况148
9.2.8计算终的解时会涉及以上的子背包吗148
9.2.9优解可能导致背包没装满吗149
9.3长公共子串149
9.3.1绘制网格150
9.3.2填充网格151
9.3.3揭晓答案152
9.3.4长公共子序列153
9.3.5长公共子序列之解决方案154
9.4小结155
0章K近邻算法156
10.1橙子还是柚子156
10.2创建推荐系统158
10.2.1特征抽取159
10.2.2回归162
10.2.3挑选合适的特征1
10.3机器学习简介165
10.3.1OCR165
10.3.2创建垃圾邮件过滤器166
10.3.3预测股票市场167
10.4小结167
1章接下来如何做168
11.1树168
11.2反向索引171
11.3傅里叶变换171
11.4并行算法172
11.5MapReduce173
11.5.1分布式算法为何很有用173
11.5.2映射函数173
11.5.3归并函数174
11.6布隆过滤器和HyperLogLog174
11.6.1布隆过滤器175
11.6.2HyperLogLog176
11.7SHA算法176
11.7.1比较文件177
11.7.2检查密码178
11.8局部敏感的散列算法178
11.9Diffie-Hellman密钥交换179
11.10线性规划180
11.11结语180
练习答案181
本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。书中的前三章将帮助你打下基础,带你学习二分查找、大O表示法、两种基本的数据结构以及递归等。余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决技巧,比如,何时采用贪婪算法或动态规划;散列表的应用;图算法;K近邻算法。
📑 Table of Contents
- 算法简介——二分查找与大O表示法
- 选择排序——数组、链表与内存工作原理
- 递归——基线条件、递归条件与调用栈
- 快速排序——分而治之与平均/最糟情况分析
- 散列表——散列函数、冲突处理与性能优化
- 广度优先搜索——图、队列与最短路径查找
- 狄克斯特拉算法——加权图与最短路径问题
- 贪婪算法——集合覆盖、NP完全问题与近似解
- 动态规划——背包问题与最长公共子串
- K近邻算法——分类、回归与机器学习入门
- 接下来如何做——树、反向索引、傅里叶变换与并行算法