开发人员必读的 10 本数据结构和算法书籍
披露:本篇文章包含附属链接;如果您通过本文提供的不同链接购买产品或服务,我可能会收到报酬。
你好,开发人员,众所周知,算法与语言无关,任何称职的程序员都应该能够将它们转换为他们选择的编程语言的代码。
不幸的是,我遇到过一些程序员,他们非常擅长 Java 或 Python 等编程语言,但很少有人了解 API 和语言复杂性的细节,但对算法和数据结构的基础知识却知之甚少。
只要要求他们实现任何流行的排序算法,如快速排序或合并排序,他们就会崩溃。
如果您希望他们了解更高级、更复杂的算法,如字符串处理算法、图形算法、树遍历或贪婪算法,请准备好检查面试;否则,您可能会遇到一些意外的情况。
有一次,我遇到了一位核心 Java 高级开发人员职位的完美候选人,他精通 Java 和多线程,但他的数据结构和算法技能与他的经验和能力不相称。
当我问他为什么在面试之前不花点时间磨练一下算法和解决问题的能力时?
他的辩解是,“那些算法只是开会用到的,从来没有在实际编码中真正用到过。在我6年的Java开发生涯中,我从来没有用过它们。”
他在某种程度上是对的;你不需要在 Java 中实现哈希表;你总是可以使用 Python 中的 HashMap 类或 Dictionary,但他未能认识到算法和数据结构在提高编程技能方面更长期的改进作用。
算法是开发编程解决技能和编码意识的工具,需要将用户需求转换为一行代码,也称为计算机程序。
它们无处不在,如果你使用 Facebook,你有没有想过它们是如何如此快速地找到你的朋友的?或者 Netflix 是如何推荐你想看的电影的?
这些只是机器学习算法的几个例子,它们将算法提升到另一个层次。
在我的上一篇文章中,我分享了开发人员必读的 10 本软件工程书籍,在本文中我们将只关注算法。

10本数据结构和算法书籍——开发人员必读
对于那些认为算法是数据结构的人来说,另一个黄金建议是对于那些想要在亚马逊、谷歌、Facebook、英特尔或微软工作的人来说;记住,除了 UNIX、SQL 和C之外,它是唯一永恒的技能。
编程语言不断演变,但编程的核心,即算法和数据结构始终保持不变。
如果您知道哈希表的工作原理,那么您可以在任何编程语言中使用它们的实现,例如JDK 中的HashMap、Python 中的 Dictionary 或 C++ boost 库中的 HashMap。
因此,如果您认真对待编程,并且现在意识到算法和数据结构不是可选的,那么这里有一些学习算法的好书。
你们中的一些人可能之前已经读过它们,但它们值得再读一遍。
1. Thomas H. Corman 著《算法导论》第 4 版
这是最受欢迎的算法书籍之一,但请注意,它包含大量理论。
本书的当前版本是第 4 版,我强烈建议每个程序员的书架上都应该有这本书,但仅供简短阅读和参考。
本书也通常被称为 CLRS(以其作者 Cormen、Leiserson、Rivest 和 Stein 的名字命名),是计算机科学领域的开创性教科书。
目前已是第四版,这一全面而权威的资源对基本算法和数据结构进行了深入探索。
这本书也是数据结构和算法的黄金标准,但不可能一次性读完这本书,有些人可能会觉得它很难读。
在这种情况下,您可以将您的学习与在线课程(如 《数据结构和算法:使用 Java 深入研究》) 和本书结合起来。
这就像两全其美,您可以在在线课程中快速学习基本算法,然后通过阅读书籍进一步巩固这些知识,这对于已经上过课的您来说更有意义。
我推荐这本书作为算法方面的首批书籍之一的另一个原因是因为它与语言无关,并且附有 讲座
2. 《Grokking Algorithms》第二版(Aditya Bhargava 著)
这是学习 Python 算法的最佳书籍之一。当我读完《算法》和《算法导论》感到厌倦时,我开始读这本书,感觉很新鲜。
从书的大小开始,与其他鼓励我阅读的算法书相比,这本书非常精简和干净。
然后我关注了 Aditya 的图表和解释以及与我相关的现实世界示例,例如当我登录时 Facebook 如何找到我的个人资料。
他们关于动态规划和背包问题的章节是另一颗宝石,因为以前我从未真正理解过动态规划,但这本书使使用动态规划变得非常容易,就像递归和分治方法的扩展一样。
所有这些因素使得这本书成为一本算法方面的必读书籍,尤其对于 Python 开发者而言。事实上,它是最好的 Python 算法书籍之一。
但如果你问,这本书是不是关于数据结构、算法和动态规划等复杂主题最易读的书之一?我强烈推荐这本书以及 Aditya Bhargava 的其他作品。
顺便说一句,如果你也像我一样在动态规划方面遇到困难,你也可以在 DesignGurus.io 上学习“ Grokking Dynamic Programming Patterns for Coding Interview”课程,这是我在准备动态规划面试题时经常使用的另一个资源。它也是我之前提到的他们所有课程包的一部分。
3. Robert Sedgewick 和 Kevin Wayne 的《算法》
长期以来,这本书都是我学习算法的首选资源,现在依然如此,只是现在我看它的次数比以前少了。你会学到很多算法的背景知识,而且现在,这本书甚至有针对不同编程语言(例如 Java 和 C++)的版本。
Coursera 上还有几门免费的在线课程,分别是《算法第一部分》和《算法第二部分》,它们与本书内容相得益彰。非常棒。这也是我向 Java 程序员推荐的学习算法的首选课程。
信不信由你,如果你已经了解一门编程语言,那么与其他编程语言相比,阅读该语言的算法示例也能降低学习难度。你也可以在这里免费在线阅读本书的第四版。
4. 《算法设计手册》第三版(作者:Steve S. Skiena)
这是另一本关于计算机算法的优秀书籍,其中涉及了大量算法,并包含大量代码。
我特别喜欢这本书的一点是,他实际上给出了他在实践中使用算法(或其变体)的例子;它确实可以帮助您了解特定算法(或算法系列)可用于解决的问题类别。
代码是用C语言编写的,但不太深奥,很容易理解。我离开学校也有一段时间了,这帮助我很快掌握了几种图算法。
我已经拥有它近 10 年了,但仍然会时不时地看一看。
本书的一个显著特点是加入了“战争故事”**,为算法设计和问题解决提供了现实世界的见解。
这本书经常因其实用性而受到称赞,除了正式的算法分析之外,还强调直觉和解决问题的能力的重要性。
它在学术环境中也被广泛使用,并且对于任何寻求更深入地了解算法原理及其实际应用的人来说都是宝贵的资源。
5.编码面试模式:搞定你的下一次编码面试
这是我读过的有关数据结构和算法的最新书籍之一,我在假期期间读了这本书,非常喜欢它。
本书由ByteByteGo的创始人、著名 《系统设计访谈---内幕指南》的作者Alex Xu与Shaun Gunawardane合作创作。
本书将教您编码模式,例如双指针、滑动窗口、快速和慢速指针,您可以使用它们来解决数百个 Leetcode 问题。
虽然编码面试模式的想法并不新鲜,而且我已经通过DesignGurus.io 的 Grokking the Coding Patterns等课程了解它们,但这本书将它们与更多现实世界的例子结合在一起,然后你在其他地方找不到。
本书包含 101 个真实的编程面试题,并配有详细的解答,最重要的是,它还包含 1000 多张图表,让学习变得非常简单。正是这些图表,让本书的价值倍增。
简而言之,《编码面试模式》是一本很棒的书,可以帮助您开始编码面试模式并掌握在下一次编码面试中取得成功所需的关键模式。
这是获取本书的链接—— 《编码面试模式:搞定你的下一次编码面试》
6. 面试算法
Adnan Aziz 撰写的《面试算法》是一本必读的算法书籍,以编程面试为背景编写。
仔细观察封面图片,你就会发现这本书有多么不同寻常。封面上画着名人的缩略图,书中还解释了如何开发这样的算法。很有意思,不是吗?
嗯,我喜欢这本书,因为它的方法和目标,有时用不同的对象学习同一件事有助于更好地理解它。
您还可以将本书与 《Grokking the Coding Interview: Patterns for Coding Questions》结合起来,这是来自 DesignGurus.io 的一门出色的互动课程,用于学习可用于解决 100 多个 Leetcode 问题的基本编码模式,如滑动窗口、合并间隔、快速和慢速指针等。
如果您喜欢 DesignGuru 的 Grokking 面试课程,可以购买他们的全套课程,享受大幅折扣 。该课程包包含他们最受欢迎的 Grokking 课程。您还可以使用折扣码 GURU 享受 30% 的折扣。
7.算法概述
O'Reilly 的《算法概述》是一本学习编程算法的优秀书籍,尤其适合 Java 程序员。
它描述了算法,重点是算法的实现,而没有使用经典算法书籍中所使用的繁重数学知识。
所有算法都以模式形式呈现,并附有使用它们的动机、提供高级概述的图片和伪代码以及工作代码(C、C++、Java和Ruby)。
他们还提供了基准测试来证明算法的理论性能。简而言之,这是程序员学习算法的最佳书籍之一。
8. Kleinberg 和 Tardos 的《算法设计》
这实际上是继托马斯·科尔蒙的《算法导论》之后算法领域第二好的书。
它实际上并不是对算法的介绍,更适合有经验的程序员。
它更多的是针对熟悉基本算法的开发人员的算法设计。
您应该从罗伯特·塞奇威克 (Robert Sedgewick) 的《算法简介》一书或《算法》开始,然后再继续阅读这本书。
9. 算法导论:一种创造性的方法*
Udi Manber 撰写的《算法导论:一种创造性的方法》是另一本适合自学的优秀书籍,因为它包含数百个问题和示例。
本书旨在提高读者解决问题的能力和对算法设计背后原理的理解,这将有助于您提高解决问题和编码技能。
10.算法设计与分析
这是另一本关于计算机算法的伟大著作,值得在程序员的书架上占有一席之地。
完成 Coursera 算法课程和其中一本入门书籍后,您可以阅读本书来学习算法的高级主题。
11.数据结构与算法。Aho, Ullman & Hopcroft [奖励1]
又一本优秀的算法和数据结构入门书。这本书生动活泼,任何不喜欢在算法中大量使用数学的程序员都会喜欢它。
顺便说一句,如果您发现这本书很难读,这也是我的一些读者所抱怨的,那么您也可以看看Aditya Bhargava 的《Grokking Algorithms》 ,这是一本最简单、最令人兴奋的算法初学者书籍之一。
12. Python 算法:掌握 Python 语言的基本算法(奖励 2)
本书专为 Python 程序员编写。Magnus Lie Hetland 也是广受欢迎的 Python 入门书籍之一《Beginning Python》的作者。
正如我所说,算法与语言无关;学习 Python 算法并不意味着你不能用 Java 或 C++ 实现它们,但如果你已经了解 Python,那么这是一本学习计算机算法的优秀书籍。
本书还重点介绍了图形算法,这对于解决实际问题非常有用。
这就是关于每个程序员都应该读的12本算法书籍的全部内容。我同意算法是一个复杂的主题,一次读完并不容易理解;在这种情况下,我建议同一本书读两遍。
另外,仅仅阅读是不够的,尝试用你喜欢的编程语言来实现它们。编写自己的 ArrayList、HashMap 或基于树的 Map 实现也没什么坏处。
学习算法的效果不是立即可见的,但随着时间的推移,你会注意到你的思维、解决方案构建和代码质量有微妙的改善。
顺便说一句,如果您对算法在线课程感兴趣,我建议您查看 Udemy 上的数据结构和算法:使用 Java 进行深入研究。
这不是免费课程,但你可以在每隔几天举行的 Udemy 闪购活动中以不到 10 美元的价格购买。
最后,程序员有两种类型,一种了解算法,一种不了解算法。
请记住,每本书都代表着一座知识宝库,能够彻底改变你的软件工程方法。今天就挑选一本,开启你的精通之旅吧!
另外,如果你还没有读过,你也可以阅读我之前分享的《开发人员必读的 10 本软件工程书籍》 ,它包含了软件工程师和开发人员除了算法之外的其他书籍。

祝您学习之旅一切顺利!
文章来源:https://dev.to/somadevtoo/10-must-read-data-structs-and-algorithms-books-for-developers-39f1