写点什么

"Grokking Algorithms"简介与作者采访

  • 2016-07-20
  • 本文字数:2570 字

    阅读完需:约 8 分钟

关键点

  • 这本书目的是告诉读者解决问题的新方法。
  • 这本书试图通过插图来让大家更容易掌握主题,避免部分读者觉得太费解。
  • 这本书不仅适合没有接触过算法的人,也适合刚从计算机专业毕业的学生。
  • 这本书提供了非常多的例子和简单练习。
  • 这并不是一本参考书,也不是练习书。它只包含了作者日常编程实践中证明了有用的算法。

Aditya Y. Bhargava 所著 _ Grokking Algorithms _(曼宁出版社出版)采用了一种全新的方式来介绍数据结构、算法和复杂度等复杂概念。作为一个视觉型学习者,Bhargava 说他试图借助插图的强大表现力来帮助读者更容易地掌握主题,避免部分读者觉得太费解。

这本书假设读者已经有了编程基础。Bhargava 说它不仅适合没有接触过算法的人,也适合刚从计算机专业毕业的学生。

书中前 3 章介绍了大 O 符号和递归等基本概念。读者在这里可以读到关于数组和链表等数据结构的例子,还有二分查找和选择排序等算法。

第 4 章以快速排序算法为例,介绍了分而治之的解决问题方法。

第 5 到 7 章主要介绍了哈希表和图。除了详细描述哈希表和图到底是什么之外,书中还提供了许多非常有意义的用例来帮助大家理解它们的使用场景。哈希冲突和性能内容都有所覆盖,还有如何选择一个合适的哈希算法等。至于图,广度优先算法和 Dijkstra 最短路径优先算法都有所讲述。

第 8 章和第 9 章用贪心算法和动态规划方法来解决一些基本问题。贪心算法是在 NP 完全问题的背景下介绍的。贪心算法和动态规划方法都用来解决旅行商问题、背包问题等经典问题。

第 10 章介绍了 K 近邻算法(K-nearest neighbors,KNN 算法),这是一种用于聚合的机器学习算法,比如设定一些数据点之间的距离定义,就可以使它们呈现出一定的聚合状态。这一章非常简单的介绍了一下机器学习后面的基本算法。

在最后一章即第 11 章里作者简单介绍了 10 个算法,为读者的进一步学习做了铺垫。算法包括基于树的搜索、倒序索引、傅立叶变换、Map-Reduce 算法、SHA 哈希等以及其他几个。

全书通篇都会通过插图来解释各个重要概念,特别有趣的是关于一些抽象概念的插图,比如递归和分而治之等。除了用插图去解释每一个概念之外,书中还提供许多的示例代码供读者去构建和执行,还有许多简单的练习题,这样作者可以在继续下一章内容之前评估一下自己对已读内容的理解程度。在书的最后一章提供了所有练习题的解决方案。全书示例代码都是用 Python 写的。

InfoQ 采访了 Aditya Y. Bhargava 来了解更多的幕后内容。

InfoQ:能请您解释一下写这本书的动机吗?除了是一本插图书之外,它与其他的算法书还有什么不同?

Aditya Y. Bhargava: 我关注使概念更容易被理解的方法。比如我写书的原则之一就是“要够用还是要全面”。很多书都是直接把很多的概念直接抛给读者,不管有用没用,这种就是“全面”的方法,我直接一股脑全说了,说不好什么时候你就用得上。而我的书则是用“够用”的方法:我只告诉读者他们现在需要知道的东西。所以我给的例子都会很简短,但都直很切题。

InfoQ:您能简单介绍一下您的计算机科学背景,以及您对算法的兴趣吗?

Bhargava:我是个自学成材的工程师。我最初是用 Basic 语言写游戏,后来改用 ActionScript。我一直都觉得算法很困难,直到终于有一天有一位老师真的帮我把概念都解释清楚了。从那时候开始我就知道了如果你能用一种好方法去解释的话,算法其实并没有那么难。

InfoQ:那您是怎么想到写一本关于算法的插图书呢?图画为什么会对解释和理解算法有帮助?

Bhargava:从 2013 年开始我就在我的博客上写有插图的文章了。我收到了很多读者善意的留言,都说插图帮他们更好的理解了概念。曼宁出版社联系了我,说想出一本插图书,我就想到算法会是一个好的点。算法都是非常抽象的概念,但图画可以让它们具体化。

InfoQ:第一眼看上去,您的书会非常吸引那些以前没有什么算法知识的程序员。您觉得对于那些曾经正式学过算法的程序员们来说,他们也会觉得这本书很有趣吗?您的书对他们有什么价值?

Bhargava:很多人都喜欢我关于动态规划算法的那一章。即使是对于科班计算机学科出身的人来说,我仍然觉得动态规划算法很难理解。我们给那一章写了很长的一节 FAQ 来给大家解释清楚动态规划算法的难以理解的部分。

有些人喜欢我给的例子。其实要解释好一个概念,是很难找到非常合适的好例子的。所以如果你想把这些概念教给别人还想让别人真的理解的话,我的书是非常有用的。

InfoQ:您的读者该期望从您的书中得到些什么?不该期望得到什么?

Bhargava:我的书会教给读者解决问题的新方法。有些读者的目的是扩大自己的工具箱,那么他们现在就应该能解决一些他们以前解决不了的问题了。

我只为本书选择那些在现实工作中有用的算法,所以这里的每一章都是非常有用的。比如我并没有讲解插入排序算法,虽然别的算法书都会提到它,但实际上它并不会对读者的工作有什么帮助。所以读者不该期望这是一本参考书,那样会让这本书不得不加入许多无用内容。

InfoQ:请问对于那些以前并没有学过算法,但又想通过读您的书来攻克这个有些难的领域的程序员,您有什么建议吗?

Bhargava:请一定把练习题都作了,大部分都很容易,几分钟就能作完。这些题可以确保你们理解了这些内容。

InfoQ:算法是个非常大的领域。您是用了什么标准来做取舍,讲什么和不讲什么呢?

Bhargava:我只选择那些对于我来说在我的日常工作中非常有用的算法,而且我也只选那些不需要有很多预备知识的算法。

InfoQ:在您做了插图的那些算法中,哪个是最有趣的,哪个是最难的?

Bhargava:最有趣的是为分而治之配图,因为它太适合用可视化的方法表现了。最难的是动态规划算法,因为在方框中很难跟踪表现那些值。

InfoQ:有没有什么算法是你本来想在书中做介绍,但最后还是没有加进来的?

Bhargava:当然有!我在第 11 章,用了一整章来列出了 10 个我本来想详细介绍的算法。其实我本来真的很想介绍一下线性规划算法的,因为它太强大了。

InfoQ:最后,对于那些读过了您的书还想在算法方面继续深入的读者,您有什么建议吗?他们接下来该怎么做?

Bhargava:在网络上有太多的资源了,比如 adit.io (我的博客)和 betterexplained.com 这两个博客。Coursera 的机器学习的课程也非常好。

关于书的作者

Aditya Y. Bhargava是一位有计算机科学和美术双学位的软件工程师。他关于编程的博客是 adit.io

阅读英文原文 Grokking Algorithms Review and Author Q&A

2016-07-20 18:272941
用户头像

发布了 152 篇内容, 共 80.0 次阅读, 收获喜欢 64 次。

关注

评论

发布
暂无评论
发现更多内容

IDEA 插件最佳组合:JRebel+XRebel 热部署和接口分析优化,太爽了

Java你猿哥

Java Spring Boot ssm IDEA 热部署

火山引擎数智平台VeDI 帮助智能投影仪更懂用户需求

字节跳动数据平台

营销数字化 业务增长 用户运营 企业号 1 月 PK 榜

NCCL源码解析①:初始化及ncclUniqueId的产生

OneFlow

人工智能 深度学习

协同存储,为边缘计算创造更大价值

阿里云CloudImagine

云计算 边缘计算

如何提升运维的效率,可以用小程序试试

没有用户名丶

高级数据库管理:SQLPro for SQLite激活版

真大的脸盆

数据库 Mac 数据库管理工具 数据库管理 Mac 软件

pix2pix3D:只需编辑标签,就能生成更逼真的三维图像

Zilliz

深圳高新技术企业申请条件以及流程简单说明

行云管家

高新企业 高新技术 高新

2023最新版Java面试八股文大全PDF版限时分享,含700道高频面试题

Java你猿哥

Java ssm Java 面试 面经 春招

透过现象看Java AIO的本质 | 得物技术

得物技术

后端 Java】

GPT-4问世;LLM训练指南;纯浏览器跑Stable Diffusion

OneFlow

人工智能 深度学习

在昇腾平台上对TensorFlow网络进行性能调优

华为云开发者联盟

人工智能 华为云 昇腾 华为云开发者联盟 企业号 3 月 PK 榜

【总结】Java实现短信验证码

宙哈哈

Java 验证码

树莓派+阿里云IoT人脸识别场景实战——业务系统架构类

阿里云AIoT

Python JavaScript 物联网 对象存储 Web App开发

ChunJun 顺利晋级“2022 年中国开源创新大赛”决赛,并荣获“优秀开源项目/社区”奖项

袋鼠云数栈

开源

DNS、硬件、LVS、Nginx该如何搭配?

源字节1号

前端开发 后端开发 小程序开发,软件开发

火山引擎DataTester:A/B实验如何应用在抖音的产品优化流程中?

字节跳动数据平台

大数据 云服务 AB testing实战 ab测试 企业号 3 月 PK 榜

3 月 16 日晚 8 点,陪你一起从 CentOS 迁移到 OpenCloudOS!

OpenCloudOS

Linux

LeetCode题解:137. 只出现一次的数字 II,哈希表,JavaScript,详细注释

Lee Chen

JavaScript LeetCode

通过微信小程序体验阿里云IoT物联网平台——设备接入类

阿里云AIoT

物联网

LED显示屏与LCD拼接屏的对比

Dylan

PC LCD1602液晶显示屏 LED显示屏

C#滑动拼图验证码实现笔记

宙哈哈

C# html 验证码

“伯乐”流量调控平台工程视角 | 得物技术

得物技术

运营 架构-

认识一下,我们是应用社交「幕后大佬」 IM 家族

融云 RongCloud

即时通讯 IM

行云管家堡垒机客服电话是多少?谁知道?

行云管家

网络安全 数据安全 堡垒机 行云管家

应用内支付服务现网、沙盒环境下常见关键事件的对比与总结

HarmonyOS SDK

HMS Core

火山引擎DataLeap:一家企业,数据体系要怎么搭建?

字节跳动数据平台

大数据 数据架构 数据治理 数据研发 企业号 3 月 PK 榜

【小程序案例】支付宝小程序-MQTT模器,IoT设备通过WSS接入阿里云IoT物联网平台——设备接入类

阿里云AIoT

JavaScript windows 物联网

DockQuery | 成为信创产业“关键码”

BinTools图尔兹

数据库 信创产业 国产数据库工具 DockQuery

强烈推荐!阿里架构师纯手写的大型分布式项目《凤凰架构》手册

Java你猿哥

Java 架构 微服务 微服务架构 面经

"Grokking Algorithms"简介与作者采访_Book Review_Sergio De Simone_InfoQ精选文章