每个开发人员都应该学习的10个算法,你了解几个?
原文网址丨https://dev.to/codesphere/10-algorithms-every-developer-should-learn-3lnm
作者丨Saji Wang
译者丨w3cschool编程狮-三宝
声明丨本文翻译仅用于学习交流,如需要转载请注明原文信息以及译者信息。
许多有抱负的开发者似乎都有一个很大的误解,认为记住标准算法很重要。对于某些工作面试来说可能是这样,但这对成为一名成功的开发人员并不是特别重要。
那么你在算法课上学到的东西没用吗?当然并非如此。但是最重要的还是算法思考的能力。这样你不仅可以复制和使用标准算法,还可以轻松地使用代码解决开发者遇到的任何问题。
下面汇总了10种算法,有抱负的开发人员应该通过这些算法来熟悉算法思维。
二分法查询是任何计算机科学课程中最先要教的内容之一。这也许是一个最简单的例子,但可以让事情的效率成倍提升。
二分法查询包括获取一个已排序的数组,通过迭代将数组拆分成两个部分,然后将要查询的元素与每一班进行比较,直到找到该元素。
排序算法是开发人员应该拥有的最基本的工具之一。其中,选择、冒泡和插入排序是新开发人员最要先学习的内容。在任何考虑速度的情况下,你也许不会使用这些算法,但使用它们是对数组遍历和操作的一个很好的应用。
与第2条一样,排序算法对于熟悉数组非常有用,但快速排序和归并排序在重要的应用中也足够有效。轻松地实现这些排序算法,对于成为一名认真的开发人员来说是至关重要的。
霍夫曼编码是现代文本压缩的基础。它的工作原理是考虑不同角色在文本中出现的频率,并基于这种频率将它们组织成一棵树。
树是开发人员使用的许多算法和软件的核心。因此,了解基本的树遍历是有抱负的开发人员的首要任务。
广度优先搜索(BFS)通过逐级探索树,直到找到目标节点。因为它确实经历了每一个节点,所以它肯定能找到解决方法
深度优先搜索(DFS)是在树中查找元素的而另一种方法。它不是逐层逐级向下工作,而是逐个分支搜索树分支。
现在假设它没有无限扩展的分支,DFS同样总是有效的。实现这两种搜索算法并不是特别复杂,但非常重要的是学会何时使用其中一种算法。很多软件设计都是能够理解你正在处理的信息的结构,并选择适合该结构的算法。
对于很多开发人员来说,梯度下降法不一定用得到。但是,如果你使用回归或机器学习来接触任何东西,那么梯度下降法将成为你工作的核心。
梯度下降法是一种使用微积分优化函数的方法。在回归和机器学习的背景下,这意味着找到能够最大限度地减少预测算法中的误差的特定值。虽然和其他很多算法相比,它涉及到更多的数学问题,但如果你要处理大量的数据和预测,了解梯度下降是如何工作的是非常重要的。
开发者要处理的另一个非常重要的问题是寻径。图被证明是一种非常通用的方法,用来描述各种涉及不同对象网络的问题。
Dijkstra算法是一种寻找图中两个节点之间最快路径的方法。它是大多数寻径工作的基础,并被用于从人工智能到游戏设计等领域。
Diffie-Hellman密钥交换很好地介绍了密码学的工作原理。更具体地说,Diffie-Hellman密钥交换通过将公钥和私钥(有效的长数字)结合起来,在不同方之间传输信息时对信息进行加密。
即使你不是从事网络安全方面的工作,作为一名开发人员,对加密和安全通信有一定的了解也是非常重要的。此外,尽管Diffie-Helman远远不是最好的算法,但它非常容易实现,与大多数其他加密通信方法足够相似。
以上9种算法提供了解决开发人员可能遇到的问题原型的方法。然而,现实情况是,作为开发人员,经常会遇到全新的算法问题。这就是为什么发展用算法解决问题的能力比记住任何算法更重要。
不过好在有许多可以练习算法的网站,例如:
https://leetcode.com/
htpps://www.hackerrank.com/
在这些网站上,你可以找到困难且令人满意的算法问题并磨练你的技能。
同样,不是只记住这些算法,就认为你就可以突然成为了一个优秀的开发者。软件工程首先能够理解问题并构建解决方案。
学习算法并不重要,因为你将不得不为你正在构建的内容里准确地实现它们。他们很重要,因为它们教会你如何解决问题。
以上就是关于开发人员需要学习的10个算法的全部内容。你认为学习算法可以帮助提升编程实力吗?在评论区留下你的看法!这里是w3cschool编程狮,点击关注我们,阅读更多的IT资讯和技术干货~
课程:《热门编程语言应用前景》
课程介绍:想要学习编程,不知道要学什么,从哪里开始学?本课程将带你了解当下热门的编程语言的应用前景,让学习有目的、有方向。
课程特点:本课程以视频讲解呈现,详细介绍各个热门语言。同时,课程是免费的,主要帮助想要学习编程的朋友们快速了解。
学习方式:扫码 ↓ 立即前往课程界面~