程序员必须掌握哪些算法?
引言
身为一个程序员,我们需要掌握很多的算法
那么熟练掌握这些算法,到底可以为身为程序员的我们带来什么呢?
提升代码效率
比如,现在让你实现这样一个功能:给你一些有序的数字,动态地查找目标数字。实现这一功能的方法有很多种,当面临不同情况的时候,我们需要使用不同的方法。
- 查找频率很低时,对于每一次查询,暴力从前向后遍历,每次查询的复杂度为
O(N)
,能解决问题。 - 当查找频率很高时,对有序数字使用二分查找,每次查询复杂度为
O(logN)
。或者使用哈希表,每次查询的复杂度为O(1)
。 - 如果数字非常多存不进内存里,可以使用
B树
的思路来优化查询。 - 当引入密集的插入操作,查询不太密集的时候,可以使用
LSM树
的思想完成这一功能。
如果你熟知各种基础算法,那么你就可以很容易地针对不同的场景找到合适的解决方案,并且将它们变成代码,以提升程序的效率。而不是遇事不决,先上暴力,虽然解决了问题,但是在时间与空间上还有很多不足。
提升能力、借鉴思路、获得启发
通过学习这些算法,可以提升我们在计算机方面的能力:抽象建模能力、逻辑思维能力等,并且积累一些解决问题的基本思路:折半、倍增、贪心、分治等。
现实中的问题都大相径庭,但是我们通过将其抽象并建模之后,会发现问题的本质是相似的,我们往往可能从某一个基础算法中获得启发,从而高效地解决问题。而达到这一境界,就要求我们首先对基础算法能非常了解,并达到熟练运用,融会贯通的地步。
所以,即使过了公司面试这一关,算法对于程序员来说依然是非常重要的。熟练掌握算法,将是你职场晋升路上的一把利刃。还是那句话,奔着求职、面试、晋升的小伙伴,刷 力扣 拿到你的 Dream Offer,走向人生巅峰!
对于算法的学习的平台,只要关注以下三个维度来进行选择:
- 第一、能够学习算法的原理,在动态规划之后的很多算法,都需要花时间去理解,需要有一个学习的过程。所以,学习算法的过程无论是边学边做还是简单的学习,最好可以附带一定的教学功能。
- 第二、可以对算法进行练习的在线测评系统 (OnlineJudge)。如何选择一个适合自己的 OJ 去练习?力扣君认为首先要看其支持的语言种类与检索功能,另外是否有定期的原创题目,原创比赛。是的,原创非常重要!(敲小黑板咯!)
- 第三、针对第二点,明确进行算法练习的目的,单纯为了提升算法能力还是在提升的同时也想为自己的技术面试做准备。
给大家推荐几个算法学习的网站:
一、力扣 Leetcode(http://leetcode-cn.com)
二、Github (https://github.com)
三、Topcoder(http://topcoder.com)
四、CourseraCoursera Online Courses & Credentials by Top Educators. Join for Free
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment