关于学习算法的一点思考

原因


作为一个技术狗,数据结构和算法的重要性是毋庸置疑的(比如说像我一样在项目里写各种鸡肋实现方式的时候,你就会体会到这玩意的重要性了)。所以,痛定思痛,决定扎扎实实的把这一块掌握起来,包括但不限于算法的原理,实现方式以及各种应用。

思路


对于算法的学习,打算从两条线入手,自顶向下和自底向上。自顶向下就是从数据结构和算法的书籍入手,一点一点啃,逐步建立起算法的知识体系,即有一个完整而清晰地框架,每个算法的原理,实现方式,以及各个算法之间的联系与区别。而自底向上则是从算法题入手,无论是在LeetCode也好,PAT也好,通过解题来学习算法的应用,思路,从而可以在开发中熟练应用各种算法的知识(当然,从功利角度来说,无论是考研复试还是找工作,算法题是你永远绕不开的坎)

而对于算法的训练,应当成为每一个开发者的日常习惯,就如同吃饭喝水一样。只有日复一日的持续学习,思考,编码过程中,才能将一项技能彻底掌握。当然,并不是说要求每天成小时的使劲做,而是细水长流,每天可以来上几道题,什么时候做都可以,早上起来,午饭后,甚至排队,蹲坑的时候都可以想,可以做,让它成为你生活的一部分,一个习惯。基于以上思考,计划两天学习一章的算法,每天两道PAT,两道LeetCode(PAT平推,LeetCode每周选一种类型进行刷题)

方式


而刷算法的思路有了,再说一下方式。

对于自顶向下来说,相当于课程的学习,逐步推进,没有什么特别要说的,按照三个步骤

  • (1)根据书来学习和理解算法
  • (2)将算法的原理和思路整理在本子上
  • (3)独立的将这个算法及相关编码实现

对于自底向上,要稍微复杂一点,大致为四个步骤

  • (1)首先分析问题,确定题目的需求(尤其英文题目,一定要看清楚),分析思路,选择对应的算法

  • (2)查找相应的数据结构与算法,进行学习记录,达到可以独立实现的程度(如果是兔系刷题方式可合并到(3)后)

  • (3)编码实现,有两种方式,第一个是兔系刷题方式

    • (a)先去看大佬们的答案,理解代码,整理思路
    • (b)然后自己独立的实现一遍,注意比对差距并完善

    另一种是龟系刷题方式

    • (a)不论多难,自己来写(实在不会看看也可)
    • (b)再找大佬的解答不断对比,找差距,完善自己的代码和意识
  • (4)整理题目,包括分析,思路,编码过程等等,整理成Markdown形式,上传到自己的Blog

    (对于具体如何刷题,可以进一步参考知乎大佬们的回答 -> 胖君

以上,希望自己可以按照这个思路坚持下来,有所收获。

(1/6 β Project)



算法笔记

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!