声明: 文章中所用到的图片, 均来自前 Google 工程师王争 (人称争哥) 的极客时间专栏 - 数据结构与算法之美(如有侵权, 请作者联系删除)
另 * - 有需要订阅此专栏的宝贝们, 欢迎找我分享返现哦~
先知先觉
需要找到好的学习方法、抓住学习重点。
来点铺垫
-
概念
-
广义上 :
- 数据结构就是指一组数据的存储结构。
- 算法就是操作数据的一组方法。
比如说图书馆储藏书籍的时候,为了方便查找,图书管理员一般会将书籍分门别类进行“存储”。按照一定规律编号,就是书籍这种“数据”的存储结构。而我们在查找书籍的时候,当然可以一本一本地找,也可以先根据书籍类别的编号,是人文,还是科学、计算机来定位书架,然后再依次查找。笼统地说,这些查找方法都是算法。
-
狭义上 :
指某些著名的数据结构和算法,比如队列、栈、堆、二分查找、动态规划等。
-
关系 :
数据结构为算法服务,算法要作用在特定的数据结构之上 – 相辅相成
存储数据是为了更好的使用数据, 而使用数据需要知道存储数据时的结构优势。
-
-
基础
- 数学基础 – 高中数学水平
- 编程基础 + 项目经验
在理解数据结构和算法如何提高效率、如何节省存储空间时会有很直观的感受
划下重点
-
首先要掌握复杂度分析方法。
用来考量效率和资源消耗,解决如何更快、更省的处理和存储数据的问题;
是数据结构和算法学习的精髓。
瞅瞅所有数据结构和算法书籍中都会讲到的知识点
-
其次集中精力攻克以下 20 个知识点
-
10 个数据结构
- 数组
- 链表
- 栈
- 队列
- 散列表
- 二叉树
- 堆
- 跳表
- 图
- Trie 树
-
10 个算法
- 递归
- 排序
- 二分查找
- 搜索
- 哈希算法
- 贪心算法
- 分治算法
- 回溯算法
- 动态规划
- 字符串匹配算法
-
提点建议
- 要学习它的“来历”、“自身的特点”、“适合解决的问题”以及“实际的应用场景”。
- 多辩证地思考,多问为什么。
-
一些可以让你事半功倍的学习技巧
前面我给你划了学习的重点,也讲了学习这门课需要具备的基础。作为一个过来人,现在我就给你分享一下,专栏学习的一些技巧。掌握了这些技巧,可以让你化被动为主动,学起来更加轻松,更加有动力!1. 边学边练,适度刷题“边学边练”这一招非常有用。建议你每周花 1~2 个小时的时间,集中把这周的三节内容涉及的数据结构和算法,全都自己写出来,用代码实现一遍。这样一定会比单纯地看或者听的效果要好很多!有面试需求的同学,可能会问了,那我还要不要去刷题呢?我个人的观点是可以“适度”刷题,但一定不要浪费太多时间在刷题上。我们学习的目的还是掌握,然后应用。除非你要面试 Google、Facebook 这样的公司,它们的算法题目非常非常难,必须大量刷题,才能在短期内提升应试正确率。如果是应对国内公司的技术面试,即便是 BAT 这样的公司,你只要彻底掌握这个专栏的内容,就足以应对。
- 多问、多思考、多互动学习最好的方法是,找到几个人一起学习,一块儿讨论切磋,有问题及时寻求老师答疑。但是,离开大学之后,既没有同学也没有老师,这个条件就比较难具备了。不过,这也就是咱们专栏学习的优势。专栏里有很多跟你一样的学习者。你可以多在留言区写下自己的疑问、思考和总结,也可以经常看看别人的留言,和他们进行互动。除此之外,如果你有疑问,你可以随时在留言区给我留言,我只要有空就会及时回复你。你不要担心问的问题太小白。因为我初学的时候,也常常会被一些小白问题困扰。不懂一点都不丢人,只要你勇敢提出来,我们一起解决了就可以了。我也会力争每节课都最大限度地给你讲透,帮你扫除知识盲点,而你要做的就是,避免一知半解,要想尽一切办法去搞懂我讲的所有内容。
- 打怪升级学习法学习的过程中,我们碰到最大的问题就是,坚持不下来。是的,很多基础课程学起来都非常枯燥。为此,我自己总结了一套“打怪升级学习法”。游戏你肯定玩过吧?为什么很多看起来非常简单又没有乐趣的游戏,你会玩得不亦乐乎呢?这是因为,当你努力打到一定级别之后,每天看着自己的经验值、战斗力在慢慢提高,那种每天都在一点一点成长的成就感就不由自主地产生了。所以,我们在枯燥的学习过程中,也可以给自己设立一个切实可行的目标,就像打怪升级一样。比如,针对这个专栏,你就可以设立这样一个目标:每节课后的思考题都认真思考,并且回复到留言区。当你看到很多人给你点赞之后,你就会为了每次都能发一个漂亮的留言,而更加认真地学习。当然,还有很多其他的目标,比如,每节课后都写一篇学习笔记或者学习心得;或者你还可以每节课都找一下我讲得不对、不合理的地方……诸如此类,你可以总结一个适合你的“打怪升级攻略”。
如果你能这样学习一段时间,不仅能收获到知识,你还会有意想不到的成就感。因为,这其实帮你改掉了一点学习的坏习惯。这个习惯一旦改掉了,你的人生也会变得不一样。4. 知识需要沉淀,不要想试图一下子掌握所有在学习的过程中,一定会碰到“拦路虎”。如果哪个知识点没有怎么学懂,不要着急,这是正常的。因为,想听一遍、看一遍就把所有知识掌握,这肯定是不可能的。学习知识的过程是反复迭代、不断沉淀的过程。如果碰到“拦路虎”,你可以尽情地在留言区问我,也可以先沉淀一下,过几天再重新学一遍。所谓,书读百遍其义自见,我觉得是很有道理的!我讲的这些学习方法,不仅仅针对咱们这一个课程的学习,其实完全适用任何知识的学习过程。你可以通过这个专栏的学习,实践一下这些方法。如果效果不错,再推广到之后的学习过程中。
内容小结今天,我带你划了划数据结构和算法的学习重点,复杂度分析,以及 10 个数据结构和 10 个算法。这些内容是我根据平时的学习和工作、面试经验积累,精心筛选出来的。只要掌握这些内容,应付日常的面试、工作,基本不会有问题。除此之外,我还给你分享了我总结的一些学习技巧,比如边学边练、多问、多思考,还有两个比较通用的学习方法,打怪升级法和沉淀法。掌握了这些学习技巧,可以让你学习过程中事半功倍。所以,你一定要好好实践哦!课后思考今天的内容是一个准备课,从下节开始,我们就要正式开始学习精心筛选出的这 20 个数据结构和算法了。所以,今天给你布置一个任务,对照我上面讲的“打怪升级学习法”,请思考一下你自己学习这个专栏的方法,让我们一起在留言区立下 Flag,相互鼓励!
另外,你在之前学习数据结构和算法的过程中,遇到过什么样的困难或者疑惑吗?欢迎留言和我分享,我会第一时间给你反馈。