\

关键点

\

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

\

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\u0026amp;A

\Grokking Algorithms\简介与作者采访相关推荐

  1. grokking algorithms K-nearest neighbors第十章 K-邻近算法 中文翻译

    说明:<grokking algorithms>算法讲解的非常深入浅出,用好多幅图以及日常常用的例子讲算法讲解的非常好,若是英文还可以的话,建议看英文原版,非常喜欢作者的写作风格,将复杂的 ...

  2. c语言修仙一十四洲简介,《C语言修仙·下》编辑推荐、内容简介及作者一十四洲简介...

    <C语言修仙·下>编辑推荐.内容简介及作者一十四洲简介 <C语言修仙·下>编辑推荐 ● <C语言修仙>是晋江超人气作者一十四洲未来幻想力作,也是晋江完结金榜作品,截 ...

  3. 《可扩展的艺术》内容回顾与作者采访

    <可扩展的艺术,现代企业的Web​架构.流程及组织>第二版,作者:Martin L. Abbott and Michael T. Fisher,是一本关于扩张中的企业组织采用web扩展来增 ...

  4. 《OpenStack 实战》内容概览与作者采访

    <OpenStack 实战> 是曼宁新近出版的一本旨在为读者介绍用于云计算(IaaS)的 OpenStack平台.InfoQ 借新书发布的机会采访了本书的作者:V. K. Cody Bum ...

  5. [转]Android应用及应用管理简介(作者:邹伟)

    一.概述 07年,Google公司推出了基于Java语言的Android平台,引起了IT业界的一致关注,同年,播思通讯公司开始研发基于其的OPhone平台. 08年,第一款Android手机G1面世, ...

  6. “揭开意识的奥秘:认知相对论”及作者李玉鑑简介 (公号发“李玉鑑AI”下载PDF资料,欢迎转发、赞赏支持科普)

    "揭开意识的奥秘:认知相对论"及作者李玉鑑简介 (公号发"李玉鑑AI"下载PDF资料,欢迎转发.赞赏支持科普) 原创: 秦陇纪 科学Sciences 今天 科学 ...

  7. 期刊论文发表时作者简介怎么写

    期刊论文发表时作者简介怎么写?作者简介主要是对作者个人信息的标注,发表论文应当对自己的文章进行详细的署名标注,除了标注基本信息,有时候还需要写作一段简短的作者简介,这是发表论文的基本要求,是毋庸置疑的 ...

  8. 如何把自己的经历写成小说_《诡秘小说》:读者与作者共同创作,难分真假,午夜不敢独自看!...

    刚刚在这一期的三江上,看到一本非常不错的悬疑作品. <诡秘小说>,作者:弹指一笑间,5级作者. 分类:悬疑-诡秘悬疑. [简介] 作者与读者共同创作,非表面众筹文学. [简评] 本书剧情十 ...

  9. 《STM32库开发实战指南:基于STM32F103(第2版)》——2.1节仿真器简介

    本节书摘来自华章社区<STM32库开发实战指南:基于STM32F103(第2版)>一书中的第2章,第2.1节仿真器简介,作者刘火良 杨森,更多章节内容可以访问云栖社区"华章社区& ...

最新文章

  1. 最近面试了一位5年的Java,一问三不知!还反怼我...
  2. windows server2012
  3. HibernateTemplate、HibernateDaoSupport两种方法实现增删改查Good
  4. 【转】两种方法教你在Ubuntu下轻松关闭触摸板(TinkPad)
  5. JVM的监控工具之jstack
  6. 一个娃娃竟然拍出50万......
  7. mysql触发器 node_node.js中事件触发器events的使用
  8. Delphi 7学习开发控件
  9. ParaView绘制gprMax正演模拟的波场快照方法(1)
  10. Sql语句中两个比较迷糊的概念:“连接查询” 与 “外键约束”
  11. react native ScrollView
  12. 使用U盘安装Ubuntu
  13. ubuntu10.04以及10.10安装配置tftp服务
  14. 鸿蒙系统nova3i,华为nova3i无惧大型手游:打造丝般顺滑娱乐体验
  15. Atitit 文档资料整理的规范流程与问题解决目录1. 减肥 11.1. 剥离非原创类文件 11.2. 去重 11.3. 转换格式 21.4. Topic主题剥离 22. 脱敏 2
  16. gomarket服务器位置,第一章 昂达V711双核版常见问题解答.pdf
  17. IP66 IP67 防护等级介绍
  18. 【群晖】VMM安装ubuntu虚拟机+Jenkins
  19. 变更 Rancher Server IP 或域名
  20. DataV-数据-api方式

热门文章

  1. bat入门-----依据ping状态判断ip【第一天】
  2. java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory
  3. (转帖)开源容器集群管理系统Kubernetes架构及组件介绍
  4. 安装mysql数据库要注意的
  5. 使用完成端口监控文件目录的例子
  6. (转)《AS3 Expert》动态语言的基石:函数闭包
  7. 一个简单的内存分配例子
  8. MFC 窗体样式修改
  9. AppSettings和ConnectionStrings的区别
  10. 恢复mysql中root用户的所有权限_如何还原MySQL root用户的全部权限