重磅推荐
【产品特色】


【编辑推荐】

●小灰的算法故事给算法这颗“炮弹”包上了“糖衣”,让算法的威力潜藏于内,外表不再吓人,萌萌哒Q弹可爱。
●从基本数据结构,到各类常用算法,再到面试算法,再到职场应用,书中的主角小灰和大黄带领大家逐个破解。
●和一群快乐的小仓鼠共同领悟算法思想、理解算法对内存空间和性能的影响,并开动脑筋去寻求解决问题的高效方案。

●《漫画算法:小灰的算法之旅》续作,新增红黑树、图、KPM、希尔排序等高阶数据结构与算法,并有更多面试实战题。

●@stormzhang帅张、《labuladong的算法小抄》作者、@敖太子三丙、@纯洁的微笑人气号主力荐


【内容简介】

《漫画算法:小灰的算法之旅》通过虚拟的主人公小灰的心路历程,用漫画的形式讲述了算法和数据结构的基础知识、复杂多变的算法面试题目及算法的实际应用场景。
第1章 介绍了算法和数据结构的相关概念,告诉大家算法是什么,数据结构又是什么,它们有哪些用途,如何分析时间复杂度,如何分析空间复杂度。
第2章 介绍了*基本的数据结构,包括数组、链表、栈、队列、哈希表的概念和读写操作。
第3章 介绍了树和二叉树的概念、二叉树的各种遍历方式、二叉树的特殊形式——二叉堆和优先队列的应用。
第4章 介绍了几种典型的排序算法,包括冒泡排序、快速排序、堆排序、计数排序、桶排序。
第5章 介绍了10余道职场上流行的算法面试题及详细的解题思路。例如怎样判断链表有环,怎样计算大整数相加等。
第6章 介绍了算法在职场上的一些应用,例如使用LRU算法来淘汰冷数据,使用Bitmap算法来统计用户特征等。

《漫画算法2:小灰的算法进阶》是《漫画算法:小灰的算法之旅》的续作,通过主人公小灰的心路历程,用漫画的形式讲述了多个数据结构、算法及复杂多变的算法面试题目。

第1章介绍了几种典型的排序算法,包括选择排序、插入排序、希尔排序、归并排序、基数排序。

第2章介绍了“树”结构的高级应用,包括二叉查找树、AVL树、红黑树、B树和B 树。

第3章介绍了“图”结构的概念,以及深度优先遍历、广度优先遍历、单源*短路径、多源*短路径算法。

第4章介绍了“查找”相关的算法和数据结构,包括二分查找算法、RK算法、KMP算法,以及“跳表”这种用于高效查找的数据结构。

第5章介绍了多种职场上流行的算法面试题目及详细的解题思路,例如螺旋遍历二维数组、寻找数组中第k大元素、求股票交易的更大收益等。


【作者简介】

魏梦舒(@程序员小灰):微信公众号“程序员小灰”的作者,多年软件行业从业经验,先后在*金融和摩拜科技从事研发工作,对算法有一定的兴趣和经验。


【媒体评论】

在算法和数据结构领域,小灰的《漫画算法》是很好的入门图书。《漫画算法 2》在前作的基础上做了诸多的扩展和深入,内容生动有趣,强烈建议想学习算法的朋友们看看这本书。

——stormzhang,同名公众号作者,超人气博主,前技术&产品人,创业者

俗话说:程序 = 数据结构 算法,虽然日常工作大多是业务开发,很少直接接触算法,但是底层API离不开巧妙的算法设计。在这本《漫画算法》的续作中,几只可爱的小仓鼠通俗易懂地介绍了常用的数据结构和算法,可帮助你对编程有更深入的理解。

——付东来(@labuladong),畅销书《labuladong的算法小抄》作者

算法本身是很枯燥的,我本人对应试教育式的刷题这种方式也不是很喜欢,但是小灰做到了漫画和知识点的结合,让学习和娱乐相结合,同时降低了学习算法的门槛。不管是入门级的新手还是职场老手,都可以阅读一下。毕竟这是一个算法为王的年代,我相信算法的重要性随着时间的推移会越来越明显,我也相信大家都能从本书学到不少算法知识。

——周凌云,微信公众号(三太子敖丙)作者

程序员小灰一直耕耘在漫画算法这个领域,积累多年经验尽心出版的《漫画算法》系列书籍,让大家以轻松有趣的方式快速掌握算法,同时这本书的实战性也很强。

——张强,微信公众号(纯洁的微笑)作者

用漫画形式讲解算法的文章不少,为什么看小灰的漫画就能够轻松地把数据结构和算法给掌握了呢?因为漫画只是个形式而已,关键点还是讲解一个问题的思路,如何一步步地引导读者去思考,由浅入深,在这方面小灰的书做得很好,强烈推荐大家阅读。

——刘欣,《码农翻身》作者

小灰所做的事情,就是给算法这颗炮弹包上了糖衣,让算法的威力潜藏于内,外表不再吓人反而萌萌哒,Q弹可爱,清新怡人。先干为敬,让我们一起吞了这颗包着炸药的糖丸!

——李烨,微软高级软件工程师

算法知识,毋庸置疑是极其重要的。但是同时他也是很枯燥乏味的,尤其是很多算法类的书籍看起来更是味同嚼蜡。但是本书形式新颖,通过漫画的形式,由浅入深的讲解各类常用算法。从基本数据结构,到各类排序算法,再到面试算法,*后又涉及到职场应用,覆盖面很全,非常值得广大程序员们阅读。

——张洪亮,公众号『Hollis』作者

小灰这本《漫画算法》,用轻松的漫画形式和通俗有趣的生活化解读,有效降低了学习算法的门槛,可以顺利引领我们进入算法殿堂,强烈推荐想学算法却因其枯燥复杂而望之生畏的朋友们一看。

——安晓辉,《程序员的成长课》作者,公众号『程序视界』主理人

小灰是个做事非常认真的同学,每次写文章都要深思熟虑的为读者着想,对每一个细节把控的都十分的严谨,小灰的漫画功底更是了得,《漫画算法》一书让我眼前一亮,没有枯燥的理论和算法,全书以生动有趣的漫画解析算法执行全过程,达到了娱乐既学习的目的,以直观、易懂的方式展现了通用数据结构和基础算法的魅力,是每一位技术工作者不可不读的一门好书。

——李艳鹏,《可伸缩服务架构:框架与中间件》等书作者

算法是我们每一位互联网技术人都逃不开的话题,但是其枯燥乏味的本质让很多初学者望而却步。对此,我推荐小灰的这本《漫画算法》给大家,本书一改传统教材的描述风格,以风趣幽默的漫画形式,带领我们走进魅力无限的算法世界,领略算法赋予的高效与神奇之处。

——翟永超,公众号『程序猿DD』作者、《Spring Cloud微服务实战》作者


【目录】

漫画算法:小灰的算法之旅

第1章 算法概述 / 1
1.1 算法和数据结构 / 1
1.1.1 小灰和大黄 / 1
1.1.2 什么是算法 / 3
1.1.3 什么是数据结构 / 7
1.2 时间复杂度 / 8
1.2.1 算法的好与坏 / 8
1.2.2 基本操作执行次数 / 10
1.2.3 渐进时间复杂度 / 12
1.2.4 时间复杂度的巨大差异 / 15
1.3 空间复杂度 / 16
1.3.1 什么是空间复杂度 / 16
1.3.2 空间复杂度的计算 / 19
1.3.3 时间与空间的取舍 / 21
1.4 小结 / 22

第2章 数据结构基础 / 23
2.1 什么是数组 / 23
2.1.1 初识数组 / 23
2.1.2 数组的基本操作 / 26
2.1.3 数组的优势和劣势 / 32
2.2 什么是链表 / 33
2.2.1 “正规军”和“地下党” / 33
2.2.2 链表的基本操作 / 35
2.3 栈和队列 / 42
2.3.1 物理结构和逻辑结构 / 42
2.3.2 什么是栈 / 43
2.3.3 栈的基本操作 / 44
2.3.4 什么是队列 / 45
2.3.5 队列的基本操作 / 46
2.3.6 栈和队列的应用 / 50
2.4 神奇的散列表 / 51
2.4.1 为什么需要散列表 / 51
2.4.2 哈希函数 / 54
2.4.3 散列表的读写操作 / 55
2.5 小结 / 59

第3章 树 / 61
3.1 树和二叉树 / 61
3.1.1 什么是树 / 61
3.1.2 什么是二叉树 / 64
3.1.3 二叉树的应用 / 67
3.2 二叉树的遍历 / 71
3.2.1 为什么要研究遍历 / 71
3.2.2 深度优先遍历 / 73
3.2.3 广度优先遍历 / 84
3.3 什么是二叉堆 / 88
3.3.1 初识二叉堆 / 88
3.3.2 二叉堆的自我调整 / 90
3.3.3 二叉堆的代码实现 / 95
3.4 什么是优先队列 / 98
3.4.1 优先队列的特点 / 98
3.4.2 优先队列的实现 / 99
3.5 小结 / 103

第4章 排序算法 / 105
4.1 引言 / 105
4.2 什么是冒泡排序 / 107
4.2.1 初识冒泡排序 / 107
4.2.2 冒泡排序的优化 / 110
4.2.3 鸡尾酒排序 / 114
4.3 什么是快速排序 / 118
4.3.1 初识快速排序 / 118
4.3.2 基准元素的选择 / 120
4.3.3 元素的交换 / 122
4.3.4 单边循环法 / 125
4.3.5 非递归实现 / 128
4.4 什么是堆排序 / 131
4.4.1 传说中的堆排序 / 131
4.4.2 堆排序的代码实现 / 134
4.5 计数排序和桶排序 / 137
4.5.1 线性时间的排序 / 137
4.5.2 初识计数排序 / 138
4.5.3 计数排序的优化 / 140
4.5.4 什么是桶排序 / 145
4.6 小结 / 149

第5章 面试中的算法 / 150
5.1 踌躇满志的小灰 / 150
5.2 如何判断链表有环 / 151
5.2.1 一场与链表相关的面试 / 151
5.2.2 解题思路 / 155
5.2.3 问题扩展 / 158
5.3 *小栈的实现 / 161
5.3.1 一场关于栈的面试 / 161
5.3.2 解题思路 / 163
5.4 如何求出*公约数 / 166
5.4.1 一场求*公约数的面试 / 166
5.4.2 解题思路 / 168
5.5 如何判断一个数是否为2的整数次幂 / 173
5.5.1 一场很“2”的面试 / 173
5.5.2 解题思路 / 175
5.6 无序数组排序后的*相邻差 / 178
5.6.1 一道奇葩的面试题 / 178
5.6.2 解题思路 / 179
5.7 如何用栈实现队列 / 184
5.7.1 又是一道关于栈的面试题 / 184
5.7.2 解题思路 / 186
5.8 寻找全排列的下一个数 / 191
5.8.1 一道关于数字的题目 / 191
5.8.2 解题思路 / 193
5.9 删去k个数字后的*小值 / 196
5.9.1 又是一道关于数字的题目 / 196
5.9.2 解题思路 / 198
5.10 如何实现大整数相加 / 205
5.10.1 加法,你会不会 / 205
5.10.2 解题思路 / 206
5.11 如何求解金矿问题 / 211
5.11.1 一个关于财富自由的问题 / 211
5.11.2 解题思路 / 213
5.12 寻找缺失的整数 / 223
5.12.1 “五行”缺一个整数 / 223
5.12.2 问题扩展 / 225

第6章 算法的实际应用 / 230
6.1 小灰上班的第1天 / 230
6.2 Bitmap的巧用 / 232
6.2.1 一个关于用户标签的需求 / 232
6.2.2 用算法解决问题 / 234
6.3 LRU算法的应用 / 241
6.3.1 一个关于用户信息的需求 / 241
6.3.2 用算法解决问题 / 243
6.4 什么是A星寻路算法 / 249
6.4.1 一个关于迷宫寻路的需求 / 249
6.4.2 用算法解决问题 / 251
6.5 如何实现红包算法 / 262
6.5.1 一个关于钱的需求 / 262
6.5.2 用算法解决问题 / 264
6.6 算法之路无止境 / 268

漫画算法2:小灰的算法进阶

第1章 排序算法进阶 / 1
1.1 新的开始 / 1
1.2 什么是选择排序 / 3
1.2.1 如何减少比较次数 / 3
1.2.2 选择排序的实现 / 8
1.3 什么是插入排序 / 10
1.3.1 扑克牌中的排序算法 / 10
1.3.2 插入排序的优化 / 14
1.4 什么是希尔排序 / 16
1.4.1 插入排序的升级 / 16
1.4.2 希尔排序的优化 / 20
1.5 什么是归并排序 / 22
1.5.1 擂台上的排序算法 / 22
1.5.2 归并排序的具体操作 / 25
1.6 什么是基数排序 / 29
1.6.1 另一种线性排序算法 / 29
1.6.2 解决对齐问题 / 33
1.7 小结 / 35

第2章 树的进阶 / 37
2.1 什么是二叉查找树 / 37
2.1.1 二叉树查找树的特性 / 37
2.1.2 二叉查找树的插入和删除 / 40
2.1.3 二叉查找树的缺陷 / 45
2.2 什么是平衡二叉树 / 47
2.2.1 平衡因子和旋转 / 47
2.2.2 平衡二叉树的插入和删除 / 53
2.3 什么是红黑树 / 58
2.3.1 另一种自平衡方式 / 58
2.3.2 红黑树的插入 / 62
2.3.3 红黑树的删除 / 68
2.3.4 红黑树的实践和应用场景 / 76
2.4 什么是B树和B 树 / 79
2.4.1 数据库的索引 / 79
2.4.2 什么是B树 / 81
2.4.3 什么是B 树 / 88
2.5 小结 / 90

第3章 图 / 91
3.1 什么是图 / 91
3.1.1 图的基本概念 / 91
3.1.2 图的存储方式 / 95
3.2 图的遍历 / 97
3.2.1 深度优先和广度优先 / 97
3.2.2 遍历的具体实现 / 101
3.3 图的*短路径 / 107
3.3.1 什么是迪杰斯特拉算法 / 107
3.3.2 迪杰斯特拉算法的原理 / 111
3.3.3 如何得到完整路径 / 116
3.4 图的多源*短路径 / 125
3.5 小结 / 132

第4章 查找算法 / 133
4.1 引言 / 133
4.2 什么是二分查找 / 135
4.2.1 一个特殊的游戏 / 135
4.2.2 二分查找的原理 / 138
4.3 什么是跳表 / 141
4.3.1 链表能做二分查找吗 / 141
4.3.2 跳表的插入与删除 / 146
4.4 什么是字符串匹配算法 / 155
4.4.1 朴素的字符串匹配 / 155
4.4.2 朴素字符串匹配的改进 / 158
4.5 什么是KMP算法 / 164
4.5.1 无谓的字符比较 / 164
4.5.2 KMP算法的原理 / 166
4.6 小结 / 176

第5章 面试中的算法 / 177
5.1 踌躇满志的小灰 / 177
5.2 如何螺旋遍历二维数组 / 179
5.2.1 *次交锋 / 179
5.2.2 解题思路 / 181
5.3 两数之和与三数之和 / 187
5.3.1 再接再厉 / 187
5.3.2 解题思路 / 189
5.3.3 问题的扩展 / 194
5.4 数组中的第k个*元素 / 201
5.4.1 一道数组相关的题目 / 201
5.4.2 解题思路 / 204
5.5 链表的倒数第k个节点 / 210
5.5.1 一道链表相关的题目 / 210
5.5.2 解题思路 / 212
5.6 千变万化的股票交易问题 / 216
5.6.1 如何获得*收益 / 216
5.6.2 解题思路 / 218
5.6.3 题目变形:买卖次数不限 / 220
5.6.4 题目再变形:2次买卖 / 221
5.6.5 *后的胜利 / 233
5.7 结束也是开始 / 235


返回顶部