vlambda博客
学习文章列表

【星尘远征 本科篇】数据结构与算法入门总结

前言

本篇文章主要是总结我的数据结构与算法的入门经历,由于本人的数据结构与算法水平还很一般,所以这篇文章只是我的个人入门经历总结,而不是入门指导,大家可以把它当成故事来看。

学数据结构与算法的目的

首先说一下学数据结构与算法的原因,我觉得最直接的原因应该是通过笔试吧。现在互联网大厂基本上都有笔试这一环节,而笔试考的正是数据结构与算法的题目。


那么互联网大厂为什么那么看重数据结构与算法呢?


一开始我还没有系统的学习数据结构与算法,只是知道有一个叫leetcode的刷题网站,有时候会去网站上看看题目,当时感觉算法题很像脑筋急转弯的题目,每题都挺有意思的,就是想不出来解法,看了答案后会豁然开朗。当时想的是:大厂原来是喜欢这种能做出“脑筋急转弯”、头脑灵活的人,这种人应该很方便后续的培养,感觉很合理。


后来我系统的学了学数据结构与算法,同时又补了点计算机的基础知识,才明白数据结构与算法在计算机中的地位。计算机各个学科的内容中基本上都有数据结构与算法的应用,可以说数据结构与算法是由计算机的其他学科发展汇总而成。它是属于工具类的学科,学好了这个工具,在遇到实际问题中便可以用它来进行解答,也就是可以写出更加高效有用的代码。


当然现在也有很多库,将很多数据结构与算法做了很好的封装,有很多方便的接口供大家使用。但是可能只有掌握了数据结构与算法的基础知识才能更好的使用这些接口,同时也可以修改相关的源码来实现自己想要的功能。所以可能这才是大厂为什么那么看重数据结构与算法的原因,这门课在计算机中的地位不言而喻。


下面介绍一下我个人的入门经历。

入门经历总结

阶段一:硬啃《算法导论》 (结果:缴械投降)


算法导论这本书我早有耳闻,听说它非常的难,但是好像只要把它吃透,算法基本上就ok了。刚入门的我也懒得去找一些数据结构与算法入门攻略啥的,便直接找了算法导论这本书的电子版,配合这mit的算法导论课直接开啃。



然后整个学习过程就是感觉算法没咋学,一直在听教授讲一堆数学证明;越听越听不下去,硬着头皮坚持了好几节课,但是其实就是仅仅把课听完而已,啥也没学会,也没有写代码。后面就坚持不下去了,就放弃了《算法导论》,从而去寻找一些入门攻略。


     【星尘远征 本科篇】数据结构与算法入门总结


阶段二:《大话数据结构》 (系统的了解了一些基本的数据结构)


硬啃《算法导论》失败后,我便打算找一本比较基础的书来入门,看了网上的一些推荐,便开始学习《大话数据结构》这本书了,这本书真的是很基础,看起来比较轻松愉快,也可以学到东西。这本书的内容基本上就是把一些很常用的数据结构给讲了一遍,还有很多图片来展示数据结构的一些操作,方便理解,十分适合入门的。可能是因为书名是大话数据结构,书中对一些常用的算法介绍相对较少,需要自己后面继续学习。


【星尘远征 本科篇】数据结构与算法入门总结


阶段三:《数据结构与算法之美》专栏学习 (巩固了数据结构同时学习了很多算法)



【星尘远征 本科篇】数据结构与算法入门总结


可能是因为花了钱吧,这个专栏我学的很认真,通过专栏一方面巩固了之前学的数据结构,同时又系统的学习了很多算法,收获还是很大的,下面是专栏的部分目录。


【星尘远征 本科篇】数据结构与算法入门总结


阶段四:刷题

刷题网站推荐:leetcode、牛客网

个人的刷题方法:每次刷题2小时,每道题给自己20分钟思考和编程,20分钟过就去看答案,理解答案。

刷题顺序:建议按类型刷题(推荐下面的项目)


【星尘远征 本科篇】数据结构与算法入门总结


下面介绍一下个人的刷题经历。

刷题经历总结

通过学习《大话数据结构》和《数据结构与算法之美》,我把常见的数据结构和算法都给过了一遍,学习过程中也把书上和专栏里面大多数的代码都敲了敲了,接下来我便信心满满的打开LeetCode准备刷题。


系统的学习数据结构与算法之后,再看LeetCode的题目,不再是像猜脑筋急转弯一样了,基本还是有点思路,知道这道题可能要用什么数据结构或者是什么算法,但是想出思路和能写出代码中间仍有很长的路需要走。


我一开始刷题的时候充满了挫败感,一题要想好久,可能想出思路自己也写不出代码,最后就去看别人的代码和思路。基本上一道题完全吃透就要花大半天,然后下次遇到这题还是啥也不会。所以前期刷题十分的煎熬,基本上很难长期坚持。


我看了一下自己的LeetCode的提交记录,曾经在2020年5月和2021年5月的时候坚持刷题半个月。下面简单分享两个我坚持半个月的刷题经历。


【星尘远征 本科篇】数据结构与算法入门总结



2020年5月那个时候我还没开始系统的学习数据结构与算法,只学过学校有一门叫计算机软件的课,那门课里面稍微有一些数据结构的内容,那个时候leetcode的题目对我来说就像是脑筋急转弯一样,整个刷题过程十分煎熬。我当时刷题主要是在为未知的夏令营中可能出现的机试做准备,想着如果现在不好好刷题,将来如果有机会入了某个学校计算机的夏令营,到时候大概率机试就会挂,肯定会非常的后悔自己当初为什么没刷题,所以我靠着这个可能的目标坚持了大半个月,虽然后面认清形式后直接没有投计算机专业的夏令营,但这大半个月的刷题让我稍微适应了一下写算法题的煎熬感。


我在2021年5月也坚持刷题半个月,那段时间是在为找暑期实习做准备,虽然后来也没找到合适的实习岗位。这个时候的我已经学了《大话数据结构》和《数据结构与算法之美》,此外我还找到了自己的刷题方法,刷题过程便不再像一年前那么煎熬了。我用的方法是倒计时的方法,每次只刷题2个小时,每道题给自己20分钟思考和编程时间,如果20分钟到了还一点思路都没就直接看答案,如果思路很清晰就继续写下去。用这个方法让我效率挺高的。之前我是每道题都硬想,没有时间限制,什么时候自己没耐心了就看答案,导致自己可能一道题弄完就没心情写第二道题了,同时也浪费了大量的时间。现在每道题只给自己20分钟,自己只要专注这20分钟就行,效率很高。



总结

简单总结一下我的入门:

1、硬啃《算法导论》失败

2、看《大话数据结构》

3、学《数据结构与算法之美》

4、刷题


目前我的数据结构与算法学习已经进入刷题阶段,一些常见的基础知识基本上都过了一遍,现在就是要靠刷题来查漏补缺、提升coding能力。


说来惭愧,自己已经好久没刷题,通过总结自己两段坚持刷题半个月的经历,我发现如果想让自己坚
持刷题,必须要有一个东西,那就是一个短期的目标,第一次坚持刷题是因为可能的夏令营,第二次则是为了找实习,目前没啥短期目标,后面我会尝试参加参加周赛,来促进自己坚持刷题,努力把自己的数据结构与算法水平再提升提升。