关于学习算法的一点思考
原因
作为一个技术狗,数据结构和算法的重要性是毋庸置疑的(比如说像我一样在项目里写各种鸡肋实现方式的时候,你就会体会到这玩意的重要性了)。所以,痛定思痛,决定扎扎实实的把这一块掌握起来,包括但不限于算法的原理,实现方式以及各种应用。
思路
对于算法的学习,打算从两条线入手,自顶向下和自底向上。自顶向下就是从数据结构和算法的书籍入手,一点一点啃,逐步建立起算法的知识体系,即有一个完整而清晰地框架,每个算法的原理,实现方式,以及各个算法之间的联系与区别。而自底向上则是从算法题入手,无论是在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协议 。转载请注明出处!