如何系统高效地学习数据结构与算法?

数据结构与算法其实并不难,东西也不算多,常用的基础的知识点更是屈指可数。觉得他太难懂,那一定是没有找到好的学习方法,没有抓到重点。

1.什么是数据结构、算法?

  学习这两者是为了使用,其实没有必要深挖定义。
  广义:数据结构是一组数据的存储结构;算法是操作数据的一组方法。
  狭义: 指某些著名的数据结构和算法。比如队列、栈.. ;二分查找、动态规划..
  数据结构为算法服务,算法要作用在特定的数据结构之上。

2.学习的重点在哪里?

  一个最重要的概念------复杂度分析。
  它几乎占据了这门课的半壁*,是其精髓。数据结构解决的是如何更省、更快地存储和处理数据。因此,需要一个考量效率和资源消耗的分析方法,这就是复杂度分析方法。
  搞定复杂度分析,就是正文了,如图:

如何系统高效地学习数据结构与算法?

 

 

  重点的20个:10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树;10个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配。
  重点关注算法的“来历、自身特点、适合解决的问题”以及“实际应用场景”

3.一些事半功倍的学习技巧

  1. 边学边练,适度刷题
      “边学边练”,把学习时涉及的数据结构和算法,全部用代码实现一遍,效果倍棒。但是,要“适度刷题”,一定不要浪费太多时间在刷题上,我们的目的还是掌握,然后应用。除非是Google、Facebook这种对算法要求很高的公司,国内企业还是重在掌握应用。
  2. 多问、多思考、多互动
      学习最好的方法,莫过于找几个人一起学,一块讨论、一块切磋,有问题及时寻求老师答疑。
  3. 打怪升级法
      学习中最大的问题,就是要坚持下来。枯燥的学习过程中,给自己设立切实可行的目标,让自己看到进度条。比如写学习笔记或心得,同时尽可能寻求正反馈。
  4. 沉淀知识
      学习需要沉淀,不要妄想一下子掌握所有。学习的过程是反复迭代、不断沉淀的过程。这两句话,也是我最为感触的地方。