如何抓住重点,系统高效地学习数据结构与算法?

数据结构与算法

  • 从广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法
  • 从狭义上将,是指某些著名的数据结构和算法,例如队列、栈、堆、二分查找、动态规划......

数据结构和算法的关系

  • 数据结构是为算法服务的,算法要作用在特定的数据结构之上。因此我们无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构
    • 例如,因为数组具有随机访问的特点,常用的二分查找算法需要用数组来存储数据
    • 但如果我们选择链表这种数据结构,二分查找就无法工作了,因为链表并不支持随机访问
  • 数据结构是静态的,它只是组织数据的一种方式。如果不在它的基础上操作、构建算法,孤立存在的数据结构就是没有用的

学习的重点在什么地方

  • 想要学习数据结构与算法,首先要掌握一个数据结构与算法中最重要的一个概念--->复杂度分析
    • 数据结构和算法解决的是如何更省、更快的存储和处理数据的问题,因此,我们需要一个考量效率和资源消耗的方法,这就是复杂度分析方法
    • 如果只掌握了数据结构和算法的特点、用法,但没有学会复杂度分析,那就相当于只知道操作口诀,而没有掌握心法
    • 这个概念几乎占了数据结构和算法的半壁江山,是数据结构和算法学习的精髓
    • 复杂度分析一定要花大力气来肯,必须拿下,并且要搞得非常熟练。否则,后面的数据结构和算法也很难学好
  • 20个最常用、最基础的数据结构与算法,不管是应付面试还是工作需要,只要集中精力逐一攻克这20个知识点就够了
    • 10个数据结构
      • 数组、链表、栈、队列、散列表
      • 二叉树、堆、跳表、图、Trie树
    • 10个算法
      • 递归、排序、二分查找、搜索、哈希算法
      • 贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法
    • 掌握了这些基础的数据结构和算法,再学更复杂的数据结构和算法,就非常容易、非常快
  • 学习数据结构和算法的过程,是非常好的思维训练过程,所以,千万不要被动地记忆,要多问为什么
  • 如果坚持这样做,写代码的时候就会不由自主地考虑到很多性能方面的事情,时空复杂度高的垃圾代码会越来越少,编程内功就能真正得到修炼

一些事半功倍的学习技巧

  1. 边学边练,适度刷题
    • 每周花1~2个小时,集中把这周三节内容涉及的数据结构和算法,全都自己写出来,用代码实现一遍
    • 可以适度刷题,但不要浪费太多时间于此,除非要面试Google、Facebook这样的题目非常难的公司
    • 而即便是BAT也不用大量刷题,只要将以上数据结构和算法内容彻底掌握也就足以应对了
  2. 多问、多思考、多互动
    • 互动带来的成就感是学习的最大动力,尝试并享受它
    • 例如提问题、给别人解答问题、讨论、教别人等都是互动
  3. 打怪升级学习法
    • 我们可以在枯燥的学习过程中,给自己设定一个切实可行的简单的目标,就像打怪升级一样
    • 这样当你努力达到一定级别后,每天看着自己的经验值、战斗力在慢慢提高,那种每天都在一点一点成长的成就感就不由自主的产生了
  4. 知识需要沉淀,不要试图一下子掌握所有
    • 如果碰到拦路虎,可以先沉淀一下,过几天再重新学一遍,也许就会了。正所谓书读百遍其义自见
posted @ 2018-09-24 10:31  大漠仓鹰  阅读(82)  评论(0)    收藏  举报