如何学习算法?

学计算机的同学不可避免地都要学习算法,很多算法都有一定的门槛,难点在于其中大量的数学表达式以及冗长的逻辑推理链条。很常见的现象:所有文字和数学符号都认识,但对整个算法就是一知半解;时间精力花了很多,理解上没有丝毫的进展,让人相当沮丧。这样糟糕的体验多几次,人就很容易放弃。要突破自己的舒适区,将之前不理解的算法啃下来不仅需要强大的毅力,还要有可操作的方法。就个人经历,整理下本人在算法学习过程中可行的方法,权当抛砖引玉。

1. 多画图,将过程形象化。根据科学家的研究,相比于文字信息,图像信息更容易让人理解,同时,图像也更容易让人形成全局观;

2. 目的论和需求论的引导。所谓目的论,了解某个步骤在干什么;需求论,知道为什么需要这个步骤。对广大从应试教育走过来的同学,这两点是我们一直忽视的。因为从小到大的学习,目的都是不言自明的为了考试,表现在教课书中就是方法论占据主导地位,书中多是罗列大量的知识点,大量的计算方法,而从来不提学了这个有什么现实意义,解决什么实际的问题。我们也就容易养成被动的看书过程,倾向于死记硬背,考前都记得,考后忘光光的特点。当然上述方式,应付考试是十分有效的,但是当我们的目标是掌握知识来解决现实问题时,就要求我们对每种方法的问题背景,适用范围,局限性等都有理解,不再是纯粹的记忆了;甚至,有时候需要我们就实际情况对已存在的方法进行优化改进。要具备上述的能力,在学习之初就需要能够从目的论和需求论的角度来看待算法。这样做的一个副产品在于:目的论和需求论有助于形成全局观,保证我们不迷失在细节。

3. 局部放大,局部推导和验证;前述算法的难点之一是逻辑推理链条长,而人脑的工作记忆是有限的,不可能将整个算法一下子放进脑子。所以,对局部进行放大,暂时关注于整体中的某个局部也是迫不得已的做法。此处需要注意的一点“整体”二字,也即在放大之始,需要明白当前局部在整体中的位置,可求助于步骤2,做到见木见林,否则容易迷失在局部。

4. 过程对比,以自己理解的一个类似过程为基础来理解当前较难以理解的过程,也就是俗话说的“踏板”。踏板的由来可借助于步骤3. 

5. 多方印证。很多时候,我们都有这样的体会:某个情境下,发现之前自认为理解的东西,要么某个细节还不清楚,要么就是误解了。杜绝这些问题的方法,1.可以将你理解的东西和别人讲述一遍;2.将自己理解的算法实现一遍。

最后,所有方法要是不能转化为自己的技能,都是空。而将方法转化为技能,只能求助于大量的刻意练习。所以,还等什么,让我们现在出发,不断地突破自己的舒适区,给自己一些挑战吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,221评论 25 709
  • 文/SR@庄子曰123 想起来这两年来,简直是不要命的熬夜,直线导致抵抗力下降,整个感觉病怏怏的!现在如非必要,我...
    庄子曰123阅读 4,778评论 0 50
  • 近日,北京市《居住证暂行条例》《北京市积分落户管理办法(试行)》相继出台,似乎这是北漂一族的重大利好消息。 根据《...
    小蓦时间阅读 2,720评论 0 2