闲着没事?你可以这样学学算法

对于很多码农来说,算法总是显得有那么一点高深莫测,好像是一道难以跨越的坎。造成这种现象的原因,一是因为我们对算法的了解和对自己能力的了解不够,还没入门就被吓退了,另外一个原因是,大部分人实际工作中很少用到算法,很多算法都已经被封装到函数库或接口里面了,只需要调用就行,而为了能早点完成任务,我们一般都不会去想接口里面的算法如何实现,只管调用来完成任务,顺利交差就万事大吉了。

“不管用什么方法,能够完成任务就可以”,其实我觉得这种想法也是可以的,毕竟我们搞技术的都比较崇尚实用主义。但是如果我们懂得背后的原理,可能心里会舒坦一些,而且在使用别人接口达不到理想的性能要求时,可以分析是否是接口的实现有问题,从而懂得去选择其他实现版本或者自己动手写,而自己动手写,就必须懂算法了。此外,很多大公司在面试中,往往也会考你算法,很多很多人都倒在算法这个环节上,尸骨遍野。这就是作为码农,即使你的工作不是算法研究,也需要了解一些基础算法的原因。

基础算法,我觉得对于大部分程序员来说,通过一定时间的练习,是可以学会的。了解了这一点,我们才不至于很容易被算法吓退。如果你是个算法小白,现在要开始学习算法了,可是又不知道从何学起,那么我这里给你一些建议。

首先,去找大学的数据结构和算法教程来看。我为什么不推荐很多人都知道的大部头《算法导论》呢?我是怕这大部头又把你吓退了,所以还是先从简单一点的开始吧。数据结构和算法是分不开的,一般来说,每种算法都是为某种数据结构服务的,不同的数据结构,往往需要使用不同的算法。数据结构,可以理解为,我们存放一堆数据时,要以某种结构形式存放,而算法,就是要从这堆数据中寻找到你想要的那一小坨数据的方法,而衡量算法优劣的,是空间和时间复杂度,也就是如果你能使用更少的时间和更少的空间(比如计算时需要使用的内存)就能得到答案,那么这个算法就是更好的。

假设你已经学过教材了,练习过教材上的一些算法题目,那么现在你可以尝试去刷刷LeetCode上的题目了。LeetCode上有很多算法题,按难度分为初级、中级等,练习时可以从简单的到难一点的,这样容易让你练习的过程中保持信心。很多公司在面试算法题时,也是直接使用LeetCode上的题目。我本人曾经在远程面试一家不错的外企时,被要求线上完成3道算法题,因为当时已经有比较长时间不接触算法题目了,所以没能很好完成,也错失了一次机会。然后第二天,我就去LeetCode上看题目,恰巧看到了这家外企出的算法题目,我再尝试去解决,没想到顺利把这些题目完成了。如果我在刷这几道题目之后接受那家外企的线上算法题笔试,也许Offer早就收入囊中了。现在,你应该知道,想要获得好的机会,为什么刷刷算法题可能也是必要的原因了。

除了LeetCode,还有一个我推荐你学习算法的网站,这个网站叫做:GeeksForGeeks,随便搜下就找到了。这网站上面有不少巨头公司的算法题目,包括微软、谷歌、亚马逊、Facebook等等,并且给出了解法,同时有不少面试者分享他们去这些公司面试后的面经,你可以参考参考。我曾经在这个网站上呆蛮长一段时间,现在很久没上去看了,写这篇文章时,我再打开这个网站,已经很难打开了,貌似需要你会轻功才能顺畅访问,哎,我就不说得太直白了。

以上提到的那些学习资料或网站资源,在你学习时,可能也会觉得学是学了,可惜缺乏使用场景,还是无法感受到这些算法的威力所在。现在也有一些付费的算法专栏,号称根据使用场景带你学习算法,让你真正明白算法是如何在实际项目中使用的。因为我没有订阅这个专栏,目前也不想免费给他们做广告,因此还是先不提了,如果需要这种学习方式,可以自己去搜索了解下这些专栏,或者私信我,我会告诉你去哪里订阅。

作为程序员,如果你还有蛮多闲暇时间,除了打游戏不知道干嘛的,建议这样去学学算法吧。不过提醒一下,我这些建议主要是给没有算法基础或者算法基础薄弱的技术人,高手路过时,还望理解,如能笑纳,本人将倍感荣幸!

原文地址:闲着没事?你可以这样学学算法

原文地址:https://www.cnblogs.com/woshiweige/p/11031209.html

时间: 2024-10-10 07:52:09

闲着没事?你可以这样学学算法的相关文章

【WPF】闲着没事,写了个支持数据列表分页的帮助类

支持分页的MVVM组件大家可以网上找,老周这个类只是没事写来娱乐一下的,主要是功能简单,轻量级,至少它满足了我的需求,也许还有未知的 bug . 这个类支持对数据列表进行分页处理,原理是利用 Skip 和 Take 扩展方法,从源列表中取出某一段数据.在实例化的时候,需要提供一个 IEnumerable<T> 对象作为参数,本类会根据这个数据源来计算分页,使用参数T使其支持泛型. public PagabledCollection(IEnumerable<T> srcItems)

闲的没事水一贴!

每次想装逼的时候打开这个网站,一看,这些题我只对了一半. ....... http://javascript-puzzlers.herokuapp.com/ 书签必备,防装逼利器. 各位大牛们,你们能做对多少~

暑假闲着没事第一弹:基于Django的长江大学教务处成绩查询系统

本篇文章涉及到的知识点有:Python爬虫,MySQL数据库,html/css/js基础,selenium和phantomjs基础,MVC设计模式,django框架(Python的web开发框架),apache服务器,linux(centos 7为例)基本操作.因此适合有以上基础的同学学习. 声明:本博文只是为了纯粹的技术交流,敏感信息本文会有所过滤,大家见谅(由于任何缘故导致长江大学教务处网站出现问题,都与本人无关). 实现思路:在没有教务处数据接口的前提下(学生的信息安全),那也只有自己写爬

闲着没事,修改下之前写的应用系统

闲着没事写点啥之springmvc梳理

用户通过浏览器向服务器发送请求,请求被springmvc的前端控制器dispatcherservlet拦截. dispatcherservlet拦截到请求后,会调用handlermapping处理器映射器. 处理器映射器根据请求的URL找到具体的处理器,生成处理器对象及处理器拦截器(如果有的话则生成)一并返回给dispatcherservlet. dispatcherservlet会通过返回信息选择合适的handleradapter(处理器适配器). handleradapter会调用并执行ha

高校挑战赛:观看世界杯--限制排序算法

试题来源:http://student.csdn.net/mcs/programming_challenges?&page=1  观看世界杯 以前在学校参加每年的ACM程序设计大赛,感觉程序算法还是挺有意思的,这两天发现一个网站上放出一些算法试题,有点当年的那种心情,看到了,感觉能干掉,那就干掉它.目前还在公司守夜中,闲着没事就试了试算法题. 速手打,没有详细检查,可能有瑕疵请见谅,但是读题.解题.算法设计,一个不少. if(type == 1){...} 这段里,虽然写的有点小复杂,但是是个简

一个从四秒到10毫秒,花了1年的算法问题?

原文:一个从四秒到10毫秒,花了1年的算法问题? 五一后的第一周,由于搬家腰扭伤了,没注意导致压迫神经,躺在床上休息了好几天.所以没事就挂 QQ,一个网友突然问了我一个算法问题.所以有了这篇文章.感触很深,所以特发此文,以纪念和写给新朋友,以及那些热爱编程的非专业人事.本人可能技术含量很低,但都很真实.虽然我只花了很少的时间,但解决了这个网友困惑了1年的问题,这个网友倒是特别感激,而我倒是感觉特别心塞.那大家喝杯茶,看看这个过程吧. 本文原文地址:http://www.cnblogs.com/a

经典算法---8皇后问题的C++实现

其实8皇后问题,很好理解,8X8的棋盘上面,放8只皇后,使他们之间不会相互攻击,具体的定义,渊源可以查看百度百科八皇后问题 本科时候学数据结构的时候就接触过这个经典算法,不过当时没怎么听明白,或者说知道是个回溯的思想,却不知道该怎么实现,原谅我只是个小白.今天上振动力学的时候,闲着没事突然想到了这个问题,顺手写下了伪代码,到实验室调试一下,基本就出来了. 调试过程中遇到了两个bug,在代码中已经注明了(这里标记下,方便自己以后能方便找到重点) 1.退出条件中有个等号 2.需要恢复现场 另外 1.

算法第四版学习——Coursera&amp;DrJava使用方法

引言 前段时间失业了,找工作的时候最深的两点体会是: 1.虽然做过大项目,做过很多复杂业务功能,涉及过很多知识领域.但是都很难表达清楚. 2.笔试遇到很多算法题,做得都比较头疼(糟糕),很多都直接影响了面试结果. 第一点我明白是需要不断总结和积累的,第二点勾起了我对算法学习的兴趣.大学学算法的时候,脱离实践,只谈时间.空间复杂度和实现难度,学完了就忘了,那样枯燥的算法我肯定不想再碰一遍. 偶然看到了Coursera的算法导论课程,遇到了大牛老师Robert Sedgewick,他的视频在网上下下