书评 – 《算法图解:程序员和其它好奇者的算法指南》(Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People)





5.00/5 (1投票)
虽然编程语言变得越来越强大和抽象,但了解底层算法和数据结构以及何时以及如何使用它们仍然是编写高效和优雅程序的关键。
概述
在他的书 Grokking Algorithms:程序员和其他好奇人士的图解指南 中,Aditya Bhargava 试图以一种非常直观和易于理解的方式解释几种基本算法。
对于所提出的每个算法,都有几个图形供读者跟随。 这使得理解这些算法变得更加容易,因为您可以无需编写任何代码即可完成它们。
话虽如此,对于每个算法都有简短的代码示例。 由于它们是用 Python 编写的,因此它们看起来与伪代码非常相似,并且应该很容易在任何其他语言中实现它们。
Content
在第一章“算法简介”中,作者概述了您将在这本书中学到的算法以及您对这本书的期望。 然后他解释了二分查找,并将读者引入 Big O 符号。
在第二章中,他讨论了数组和链表,然后介绍了选择排序算法。
第三章讨论了递归以及它如何影响程序的调用堆栈。
在涵盖了这些基本主题之后,第 4 章深入探讨了解决问题的分而治之方法,并使用快速排序算法对其进行了解释。 紧随其后的是对不同排序算法的比较以及有关 Big O 符号的更多解释。
在第 5 章中,Aditya Bhargava 讨论了哈希表、它们的用例、冲突和性能考虑因素。
在第 6 章中,读者被介绍给图和广度优先搜索算法,以找到最短路径。 虽然图及其算法可以被认为是更高级的,但作者在通过大量使用可视化来解释它们方面做得很好。
第 7 章以非常直观和易于理解的方式介绍了 Dijkstra 算法,并展示了何时以及何时不使用它。
接下来的章节讨论了更高级的概念。
第 8 章介绍了几个 NP 完全问题,例如背包问题、旅行商问题和集合覆盖问题。 它还展示了如何使用所谓的贪婪算法“解决”它们。
在第 9 章中,作者讨论了动态编程以及如何将其应用于上面提到的一些问题。
最后,第 10 章简短但切中要点地介绍了机器学习以及它可以应用的地方。 提出的算法是 K 近邻。
在最后一章中,作者为读者提供了一个更高级算法的路线图,以便更深入地研究算法。
这本书适合谁?
本书显然是针对初级程序员和没有计算机科学学位的人。 我个人认为,它将成为一本很好的书,可以作为大学课程中关于基本算法和数据结构的配套和/或准备。 高级软件工程师或具有计算机科学学位的读者可能不会从本书中学到太多东西,但是,它可以是一个很好的复习,让您赶上一些您错过的基础知识。 如果您已经精通算法,您将不会在这本书中找到任何新东西,最好寻找更高级的文献。
如果您是算法新手,我强烈建议您阅读这本书。
摘要
我给这本书打了 5 星(满分 5 星),因为作者出色的写作风格和所有可视化效果、本书的布局以及算法的呈现顺序。 虽然它不会让您深入了解所涵盖算法的底层理论和细节,但本书将为您阅读高级书籍做好准备,例如 Robert Sedgewick 的 Algorithms 或 Data structures and algorithms in Python.