@[toc]
前言:
你是否曾跟我一样,因为看不懂数据结构和算法,而一度怀疑是自己太笨?
实际上,很多人在第一次接触这门课时,都会有这种感觉,觉得数据结构和算法很抽象,晦涩难懂,宛如天书。正是这个原因,让很多初学者对这门课望而却步。
我个人觉得,其实真正的原因是你 没有找到好的学习方法, 没有抓住学习的重点。实际上,数据结构和算法的东西并不多,常用的、基础的知识点更是屈指可数。只要掌握了正确的学习方法,学起来并没有看上去那么难,更不需要什么高智商、厚底子。
什么是数据结构?什么是算法?
虽然我们说没必要深挖严格的定义,但是这并不等于不需要理解概念。 下面我就从广义和狭义两个层面,来帮你理解数据结构与算法这两个概念。
从广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。
图书馆储藏书籍你肯定见过吧?为了方便查找,图书管理员一般会将书籍分门别类进行“存储”。按照一定规律编号,就是书籍这种“数据”的存储结构。
那我们如何来查找一本书呢?有很多种办法,你当然可以一本一本地找,也可以先根据书籍类别的编号,是人文,还是科学、计算机,来定位书架,然后再依次查找。笼统地说,这些查找方法都是算法。
从狭义上讲,是指某些著名的数据结构和算法,比如队列、栈、堆、二分查找、动态规划等。这些都是前人智慧的结晶,我们可以直接拿来用。我们要讲的这些经典数据结构和算法,都是前人从很多实际操作场景中抽象出来的,经过非常多的求证和检验,可以高效地帮助我们解决很多实际的开发问题。
学习这个算法需要什么基础?
看到数据结构和算法里的“算法”两个字,很多人就会联想到“数学”,觉得算法会涉及到很多深奥的数学知识。那我数学基础不是很好,学起来会不会很吃力啊?
数据结构和算法课程确实会涉及一些数学方面的推理、证明,尤其是在分析某个算法的时间、空间复杂度的时候,但是这个你完全不需要担心。
学习的重点在什么地方?
提到数据结构和算法,很多人就很头疼,因为这里面的内容实在是太多了。这里,我就帮你梳理一下,应该先学什么,后学什么。你可以对照看看,你属于哪个阶段,然后有针对性地进行学习。
想要学习数据结构与算法, 首先要掌握一个数据结构与算法中最重要的概念——复杂度分析。
这个概念究竟有多重要呢?可以这么说,它几乎占了数据结构和算法这门课的半壁江山,是数据结构和算法学习的精髓。
搞定复杂度分析,下面就要进入 数据结构与算法的正文内容 了。
为了让你对数据结构和算法能有个全面的认识,我画了一张图,里面几乎涵盖了所有数据结构和算法书籍中都会讲到的知识点。
(图谱内容较多,建议长按保存后浏览)
一些可以让你事半功倍的学习技巧
现在我就给你分享一下,专栏学习的一些技巧。掌握了这些技巧,可以让你化被动为主动,学起来更加轻松,更加有动力!
1.边学边练,适度刷题
“边学边练”这一招非常有用。建议你每周花1~2个小时的时间,集中把这周的三节内容涉及的数据结构和算法,全都自己写出来,用代码实现一遍。这样一定会比单纯地看或者听的效果要好很多!
有面试需求的同学,可能会问了,那我还要不要去刷题呢?
我个人的观点是 可以“适度”刷题,但一定不要浪费太多时间在刷题上。我们 学习的目的还是掌握,然后应用。除非你要面试Google、Facebook这样的公司,它们的算法题目非常非常难,必须大量刷题,才能在短期内提升应试正确率。
2.多问、多思考、多互动
学习最好的方法是,找到几个人一起学习,一块儿讨论切磋,有问题及时寻求老师答疑。
除此之外,如果你有疑问,你可以随时在留言区给我留言,我只要有空就会及时回复你。不懂一点都不丢人,只要你勇敢提出来,我们一起解决了就可以了。
3.打怪升级学习法
学习的过程中,我们碰到最大的问题就是,坚持不下来。 是的,很多基础课程学起来都非常枯燥。为此,我自己总结了一套“打怪升级学习法”。
游戏你肯定玩过吧?为什么很多看起来非常简单又没有乐趣的游戏,你会玩得不亦乐乎呢?这是因为,当你努力打到一定级别之后,每天看着自己的经验值、战斗力在慢慢提高,那种每天都在一点一点成长的成就感就不由自主地产生了。
所以, 我们在枯燥的学习过程中,也可以给自己设立一个切实可行的目标,就像打怪升级一样。
比如,每节课后都写一篇学习笔记或者学习心得;诸如此类,你可以总结一个适合你的“打怪升级攻略”。
如果你能这样学习一段时间,不仅能收获到知识,你还会有意想不到的成就感。因为,这其实帮你改掉了一点学习的坏习惯。这个习惯一旦改掉了,你的人生也会变得不一样。
4.知识需要沉淀,不要想试图一下子掌握所有
在学习的过程中,一定会碰到“拦路虎”。如果哪个知识点没有怎么学懂,不要着急,这是正常的。因为,想听一遍、看一遍就把所有知识掌握,这肯定是不可能的。 学习知识的过程是反复迭代、不断沉淀的过程。
如果碰到“拦路虎”,你可以尽情地在留言区问我,也可以先沉淀一下,过几天再重新学一遍。所谓,书读百遍其义自见,我觉得是很有道理的!
我讲的这些学习方法,不仅仅针对咱们这一个课程的学习,其实完全适用任何知识的学习过程。你可以通过这个专栏的学习,实践一下这些方法。如果效果不错,再推广到之后的学习过程中。