如何抓住重点,系统高效地学习数据结构与算法?
数据结构与算法
- 从广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法
- 从狭义上将,是指某些著名的数据结构和算法,例如队列、栈、堆、二分查找、动态规划......
数据结构和算法的关系
- 数据结构是为算法服务的,算法要作用在特定的数据结构之上。因此我们无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构
- 例如,因为数组具有随机访问的特点,常用的二分查找算法需要用数组来存储数据
- 但如果我们选择链表这种数据结构,二分查找就无法工作了,因为链表并不支持随机访问
- 数据结构是静态的,它只是组织数据的一种方式。如果不在它的基础上操作、构建算法,孤立存在的数据结构就是没有用的
学习的重点在什么地方
- 想要学习数据结构与算法,首先要掌握一个数据结构与算法中最重要的一个概念--->复杂度分析
- 数据结构和算法解决的是如何更省、更快的存储和处理数据的问题,因此,我们需要一个考量效率和资源消耗的方法,这就是复杂度分析方法
- 如果只掌握了数据结构和算法的特点、用法,但没有学会复杂度分析,那就相当于只知道操作口诀,而没有掌握心法
- 这个概念几乎占了数据结构和算法的半壁江山,是数据结构和算法学习的精髓
- 复杂度分析一定要花大力气来肯,必须拿下,并且要搞得非常熟练。否则,后面的数据结构和算法也很难学好
- 20个最常用、最基础的数据结构与算法,不管是应付面试还是工作需要,只要集中精力逐一攻克这20个知识点就够了
- 10个数据结构
- 数组、链表、栈、队列、散列表
- 二叉树、堆、跳表、图、Trie树
- 10个算法
- 递归、排序、二分查找、搜索、哈希算法
- 贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法
- 掌握了这些基础的数据结构和算法,再学更复杂的数据结构和算法,就非常容易、非常快
- 10个数据结构
- 学习数据结构和算法的过程,是非常好的思维训练过程,所以,千万不要被动地记忆,要多问为什么
- 如果坚持这样做,写代码的时候就会不由自主地考虑到很多性能方面的事情,时空复杂度高的垃圾代码会越来越少,编程内功就能真正得到修炼
一些事半功倍的学习技巧
- 边学边练,适度刷题
- 每周花1~2个小时,集中把这周三节内容涉及的数据结构和算法,全都自己写出来,用代码实现一遍
- 可以适度刷题,但不要浪费太多时间于此,除非要面试Google、Facebook这样的题目非常难的公司
- 而即便是BAT也不用大量刷题,只要将以上数据结构和算法内容彻底掌握也就足以应对了
- 多问、多思考、多互动
- 互动带来的成就感是学习的最大动力,尝试并享受它
- 例如提问题、给别人解答问题、讨论、教别人等都是互动
- 打怪升级学习法
- 我们可以在枯燥的学习过程中,给自己设定一个切实可行的简单的目标,就像打怪升级一样
- 这样当你努力达到一定级别后,每天看着自己的经验值、战斗力在慢慢提高,那种每天都在一点一点成长的成就感就不由自主的产生了
- 知识需要沉淀,不要试图一下子掌握所有
- 如果碰到拦路虎,可以先沉淀一下,过几天再重新学一遍,也许就会了。正所谓书读百遍其义自见

浙公网安备 33010602011771号