如何才能记住各种算法?

古堡王子


作为一个程序员,如果记不住算法,那什么都不要谈了,其实记算法和平时我们背书还是大同小异的,但是如果全部想靠那个烂记忆力死记硬背,当然是万万不行的,特别是理科方面的东西。

大学有几个同学学的计算机与科学,c++,visual basic,,,乱七八糟的一堆代码算法,一页一页的纸令人眼花缭乱,但是有个同学,他从来不背书,他只用心看一遍就都会了,应对期末考试小菜一碟,毕业之后不断的应用自己学到的算法,提高自己的能力。而相反,有个同学,前面不学,一到期末考试,死命背,还背不下去,结果几年下来,什么都学不到,只是顺利的毕业罢了,背的东西全忘记了,毫无意义。

其实这种状况在大学里是非常常见的,很多人只为了应付期末而不是真正的想学到什么。平时认真听,再做题,从理论到实践,体会算法自身的精妙之处,还用浪费时间去背吗?这和高中的数学公式是一个道理,理科,从来就是不需要背的,多实践,自然就记得很清楚而且很难忘的那种。

算法是需要结合实际环境进行应用的。俗话说“光说不练假把式”,光有理论而不应用实践的话,那将失去了它原有的意义。以前一个理科老师说过如果你对一个东西足够理解,那么就算你一时忘记了。根据一些线索,依旧可以回忆起来。这才是真正的记住。首先,第一步需要我们去查阅资料,然后仔细的了解该算法的内容,包括算法的思想和实现方式,其次,了解以后就去观摩模板,理清思路,接着试水接下来就是通过大量的练习,将算法融会贯通。通过运用和实战来巩固和夯实自己的能力。哪里还需要去刻意的记住呢?


镁客网


算法

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

算法对于程序员来说,即恨又爱。如果你想要进 BAT 公司,那么你的算法基础一定要好,同时算法又是非常的难学。基础的算法有各种排序算法:插入排序,归并排序,快速排序,希维尔排序,堆排序等等。对于这些基础算法要求你可以白板写出来。白板写算法,即给你一张纸和笔叫你写出给定的算法。对于习惯各种编程软件的人来说,白板写算法是有一定的难度的。由于习惯编程软件带来的方便,一个编程词语你只要打出一个字母就会有提示,直接敲回车就打出来。但当你白板写时,就很有可能忘记这个单词是这么拼写的。

算法学习建议

算法既然这么重要,但同时又那么难,那我们应该怎么样进行学习呢?这里我给大家一点建议。

1、培养对算法的兴趣

市面上有非常多的算法书籍,对于刚接触算法的人来说,最重要的先培养你对算法的兴趣。兴趣是最好的老师。如果你一开始就去学习红黑树算法,我相信没有一个人能在对算法产生兴趣。对于初学者来说我推荐去看《啊哈!算法》。

《啊哈!算法》是一本充满智慧和趣味的算法入门书。没有枯燥的描述,没有难懂的公式,一切以实际应用为出发点,通过幽默的语言配以可爱的插图来讲解算法。你更像是在阅读一个个轻松的小故事或是在玩一把趣味解谜游戏,在轻松愉悦中便掌握算法精髓,感受算法之美。

2、进阶学习算法

当你看完《啊哈!算法》之后,你就会对算法有了初步的认识,知道算法是什么,我们可以利用算法做什么。在这期间也能够培养你对算法的兴趣,从而开始接下来的进阶。

进阶的书本推荐《算法》第四版,有人可能会推荐《算法导论》这本书。但《算法导论》主要是探讨了如何在数学模型写一个漂亮的算法,老版还居然使用 pseudo code。非常的晦涩难懂,很难让人坚持读下去。在学术上,毫无疑问《算法导论》更高。

而《算法》第四版是以 Java 为语言来讲解各种经典算法,从易到难,对每个算法分析的非常详细,并且通俗易懂。是非常不错的一本算法进阶书籍。

3、结合他人博客进行学习

在学习算法过程中,你会接触到各种各样的算法,但基础的算法就是那么几个。对于基础的算法,一定是要达到随时都可以白板默写的程度。所以在学习算法的过程中反复的学习是非常的重要。对于在书本上新接触到的算法,可能你会看的似懂非懂,在进行白板默写的时候,总是会少了几行代码。这就是由于你对这个算法理解还不是非常的透彻,这时候你就可去网上搜索相应的算法教程。看看别人在学习这个算法的思路是什么,在结合你对这算法的理解。反复的琢磨,就能非常的牢固记住这个算法。

4、坚持学习

说的再多,如果你不去做,不坚持学习。你永远都无法掌握算法。学习算法是一个非常漫长的过程,没有人可以一个月精通算法。你要做好持久战的准备。每天为自己安排一定时间,静下心来认真的学习算法。那怕你今天只学习到一个排序算法,但你要知道时间的力量是非常的强大,你每天坚持学习一个算法知识,看几页算法的书籍,三个月之后,一年之后,你在回头看看自己的算法水平。你就会发现原来算法并不是想象中那么高深莫测,学习不了的知识。所以行动起来!就从现在开始,拿着一本算法的书,规划好每天学习算法的时间,坚持学习!相信未来的你,一定会感谢自己的努力,大家一起加油!


stormzhang


大学的时候是在学院实验室搞ACM(一种算法比赛,三人一队,比赛时长5小时),算是接触了许多的数据结构和算法,姑且以我自身的经历来说一下。


以我自身学习算法的经历,学习一个算法基本上按照以下4步进行:

1.在我准备学习一个新的算法的时候,首先我会去查这方面的书籍或者去网上找相应的材料,包括博客或者是paper,但查的最多的还是博客,一般是CSDN。然后仔细的了解该算法的内容,包括算法的思想和实现方式,我一般都会把该算法的实现过程通过自己出的数据在草稿纸上手动模拟一下,这样可以很充分的了解算法的每一步执行,为之后的Coding打下很好的基础。


2.理论储备完成以后,基本上就是Coding,其实对于算法来讲,你如果真的认真做了第一条,其实Coding真的是很简单的事情,只不过是按照算法每一步去实现,可能刚开始的时候你会觉得很难,无从下手,这时候你可以去博客或者Google网上大佬们的源码瞻仰,然后根据你所理解的算法的步骤去手动模拟一下


3.俗话说“只学不练假把式”,接下来就是通过大量的练习,将算法融会贯通,因为我是搞ACM的,所以我们一般会去各大高校的ACM网站或者做大量的在线的比赛,通过运用和实战来巩固和夯实自己的能力。所以这就回到了你的问题上,怎样记住各种算法?唯手熟尔,也是我们俗称的“肌肉记忆”。


4.写博客,每次做完题以后写题解发表在自己博客上,这也是我们刘老师当初要求的,我一直觉得这是给我养成良好习惯和好的素养的最重要的方面。



PS:下面贴一下原先经常去做题然后存储的几个刷题的网站,圈起来的几个基本上是我以前常用的。


PPS:可耻的贴一下自己的CSDN的博客,虽然好久不更新了,但是以前写的好多题解都在,希望可以给你带来一些帮助

https://blog.csdn.net/u013486414


Python空间


这东西好像过一段日子总是会忘记,估计还是学的太渣了。

刚好一起复习下

排序算法有8种:

插入排序:直接插入,希尔排序

选择排序:简单选择,堆排序

交换排序:冒泡排序,快速排序

归并排序

基数排序

反正算法导论是看得迷糊,算法书籍一般会写排序、查找、树和图的运行过程。

排序当然还是要搞懂每种算法的复杂度,具体代码和逻辑。这个过程可能还要了解下计算机 CPU 缓存命中率什么的。

先搞懂每种算法是什么,代码怎么写,再搞清楚为什么这样写。还是得多做题,多练。

练成肌肉记忆了,没事了再瞅瞅,应该就懂了。

书读百遍其义自见嘛。


老七玉


这个问题问得很好,我那时候也是有着困惑。没入门的话,先看看几大经典的排序算法(直接插入,希尔排序,简单选择,堆排序,冒泡排序,快速排序,归并排序,基数排序),可以把代码背诵下来,然后复现。

但最好理解代码背后的数学逻辑,当你使用这些基础算法的时候,脑海里有个图浮现出来,然后你在这上面完善它整个算法流程。我那时候学习的方法是用扑克牌来学习经典算法,后面熟了之后就可以在代码上快速复现它。

不积跬步,无以至千里;不积小流,无以成江海。

现在有个网站是可以用动画学习算法和数据结构——VisuAlgo。VisuAlgo是由Steven Halim博士在2011年发布的一款可视化学习算法的工具,用于帮助其学生更好地理解数据结构和算法,可以让学生按自己的步骤来学习。下图是VisuAlgo的主页,不得不说我上去体验后感觉很有趣,很适合对基础算法的学习和了解,是一个找到后令人惊喜的网站。

VisuAlgo里面包含了许多先进的算法,这些算法在Steven Halim博士的书籍里都有讨论。就某种意义而言,这些先进的算法可视化/动画基本只能在VisuAlgo中找到。例如在图遍历可视化中,里面不仅标准的深度优先搜索(DFS)和广度优先搜索(BFS)算法,还包含了它们的变异。

之前没有这个网站时我是用笔和扑克牌来理解算法的,现在工具方便了,但是道理还在那。知识的体系结构类似一棵树,如果你想要学得快记得牢固,就必须把主干和粗线条先学习扎实,因为后来的高级知识类似树叶,需要有主干的支持才能挂靠牢固。


如果你对学习人工智能和深度学习感兴趣,可以订阅我的头条号,我会在这里发布所有与算法、机器学习以及深度学习有关的有趣文章。


杨沐白


您好,学习这样的技术,一定要去大城市寻找规模大,口碑好,师资力量强的院校学习,靠谱,培训机构的培训后期短,不易掌握。望采纳,谢谢


合肥新华电脑40


算法不是记的,是用的。代码也不是记的,是用的。

想学算法,首先掌握一门语言,C,C++,JAVA都可以,然后学一本数据结构,然后看一本简单的算法入门书,程度不太好的,一点不建议你看《算法导论》,大量伪码证明会让你崩溃,看图解多,代码直接运行的,可以看看《趣学算法》,书比较厚,大量篇幅描述为什么这样设计算法,完美图解演示算法执行过程,几乎包含了所有经典算法策略。太太太菜鸟的,可以看看《啊哈算法》,里面讲的内容不多,有很多算法没讲,优点是简单。入门之后,再看《算法导论》就简单多了,暮然回首的感觉。

没有基础的,不建议参加培训课程,等入门后,提高时可以一报名参加。需要记笔记。刷题,比赛会更有趣,有动力点,比孤军奋战要强多了。


翩翩起舞讲算法


首先必须要说明的是,靠死记硬背绝对是靠不住的。这样的记住毫无意义。算法是什么,算法是需要结合实际环境进行应用的。老师们都常说,如果你对一个东西足够理解,那么就算你一时忘记了。根据一些线索,依旧可以回忆起来。这才是真正的记住。

那么,如何才能真正的记住呢。毋庸置疑,必须要从算法的原理入手,为什么会有这个算法出来?适用于什么场合?优缺点?该场合还有什么算法可以与之相媲美?这些问题,是学习算大的先决条件。。

解决了如上问题后,接着我们才可以真正的谈论算法代码的编写。编写也是有顺序的,我们不能指望一次性就写出符合需求的算法,我们首先要写出伪代码,伪代码就是部分代码+文字,类似于流程图的方式说清楚问题的解决方式。

写完了伪代码,然后我们可以根据课本指导或者大神代码指导,从真正的代码去填充伪代码中的文字部分。最后填充完毕,根据代码健壮性等原则在优化代码,进一步在单步调试。

我相信,这一套流程走下来,一般人至少需要两天左右,或者更久,之后,就算你想完全忘记这个算法也是不容易的。。因为他已经和你的实际生活息息相关了。


不一样的游戏


不用背,理解了就行,即使不理解也没关系,心里有个印象,知道这个算法主要是解决哪类问题的就好。将来在开发中遇到问题时可以有个解决方向。


CG秀场


有电脑了,为什么还要死记硬背呢?每天都在写程序的程序员,肯定不会花时间在背书上。如果工作中需要用到某些算法,可以借助互联网查询,也可以自己建立一个算法库,用的时候直接调用就可以了~


分享到:


相關文章: