许多有抱负的开发者似乎存在很大的误解,认为记住标准算法很重要。现在对于一些工作面试可能是这样,但对于真正成为一名成功的开发人员来说并不是特别重要。
那么你在算法课上学的东西就没用了吗?绝对不。非常重要的是算法思考的能力。不仅是为了让您可以复制和祭坛标准算法,而且还为了让您能够轻松地使用代码来解决您作为开发人员遇到的任何问题。
这就是为什么我们汇总了 10 种算法的列表,有抱负的开发人员应该通过这些算法来熟悉算法思考。

1. 二分查找
二分查找是任何计算机科学课程中最先教授的内容之一。这也许是最简单的例子,说明一点点独创性如何使事情变得更高效,从字面上看,效率呈指数级增长。


二分搜索包括获取一个排序数组,迭代地将数组分成两半,并将您要查找的元素与每一半进行比较,直到找到该元素。

2. 选择、冒泡和插入排序
排序算法是开发人员应该拥有的最基本的工具之一。选择、冒泡和插入排序是新开发人员应该首先完成的一些工作。在速度很重要的任何情况下,您都不会使用这些算法,但使用它们是对数组遍历和操作的一个很好的介绍。


3. Quicksort 和 Mergesort
与 #2 类似,排序算法非常适合熟悉数组,但 Quicksort 和 Mergesort 的效率足以用于严肃的应用程序。舒适地实施这些排序算法(注意“舒适”而不是“记住”)这些算法对于成为一名认真的开发人员至关重要。


4. 霍夫曼编码
霍夫曼编码是现代文本压缩的基础。它的工作原理是考虑不同字符在文本中出现的频率,并根据此频率将它们组织在树中。


花时间使用霍夫曼编码是熟悉数据表示和树遍历的好方法,这是计算机科学家需要解决的两个最重要的问题。

5. 广度优先搜索
再次证明,树是开发人员使用的许多算法和软件的核心。因此,了解基本的树遍历是有抱负的开发人员的首要任务。
广度优先搜索的工作原理是逐层探索树,直到找到目标节点。由于它确实遍历了每个级别,因此可以保证找到解决方案


6. 深度优先搜索
继续树遍历,深度优先搜索是另一种在树中查找元素的主要方法。它不是逐层向下处理树,而是逐个分支探索树分支。


现在假设它没有无限扩展的分支,DFS 将同样始终有效。实现这两种搜索算法并不是特别复杂,但非常重要的是学会何时使用其中一种算法。许多软件设计都能够理解您正在使用的信息的结构,并选择针对该结构进行优化的算法。

7. Gradient Descent
现在对于很多开发者来说,Gradient Descent 不一定有用。但是,如果您正在接触回归或机器学习方面的任何内容,那么梯度下降将成为您工作的核心。


梯度下降是一种使用微积分优化函数的方法。在回归和机器学习的背景下,这意味着找到能够最小化预测算法误差的特定值。虽然它在数学上肯定比许多其他算法更复杂,但如果你正在大量处理数据和预测,那么理解梯度下降的工作原理是非常重要的。

8. Dijkstra 算法
开发人员处理的另一个极其重要的问题是寻路。事实证明,图是描述涉及不同对象网络的各种问题的一种非常通用的方法。


Dijkstra 算法是一种寻找图中两个节点之间最快路径的方法。它是大多数寻路工作的基础,并发现自己被用于从人工智能到游戏设计的任何领域。

9. Diffie-Hellman 密钥交换
Diffie-Hellman 密钥交换很好地介绍了密码学的工作原理。更具体地说,Diffie-Hellman 密钥交换通过组合公钥和私钥(实际上是长数字)来加密在不同方之间传输的信息。


即使您不从事网络安全工作,对加密和安全通信有实际的了解对于开发人员的工作也非常重要。此外,尽管 Diffie-Helman 远非最佳算法,但它非常容易实现,并且与大多数其他加密通信方法非常相似。

10. 做练习题
前九种算法都为您提供了解决开发人员可能遇到的原型问题的方法。然而,现实情况是,作为开发人员,您经常会遇到全新的算法问题。这就是为什么比记住任何算法更重要的是培养用算法解决问题的能力。
幸运的是,不乏可供练习的网站。我们最喜欢的一些是:
https://leetcode.com/
https://projecteuler.net/(更多数学知识)
https://www.hackerrank.com/
这些是寻找困难但令人满意的算法问题和磨练技能的绝佳环境。