【数据结构与算法】01-如何学习数据结构与算法

一、什么是数据结构,什么是算法

  过于学术的概念定义比较抽象,难以理解。我们从广义和狭义两个层面,来理解数据结构与算法这两个概念。

1. 广义角度

  从广义上讲,数据结构就是指一组数据的存储结构(怎么放)算法就是操作数据的一组方法(怎么用)

  我们以图书馆的场景为例来进一步理解:

  图书馆书籍量十分巨大,首先要分类设置阅览室,譬如社科类、科技类、报刊类等。每个阅览室内,再根据图书的索引号排列摆放。这就是“数据结构”。当我们想借阅某本书时,可以到每个阅览室去,一本一本地找,也可以通过检索索引号,直接到对应的阅览室去查找。这些不同的查找方式,其实就是“算法”。

2. 狭义角度

  从狭义上讲,是指某些典型的数据结构和算法。比如队列、栈、堆、二分查找、动态规划等。

 

二、数据结构和算法的关系

  数据结构和算法这两个概念,有点“焦不离孟,孟不离焦”的意思。我们之所以总是把它们放在一起,是因为数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。我们无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构。数据结构是静态的,它只是组织数据的一种方式。如果不在它的基础上操作、构建算法,孤立存在的数据结构是没有用处的。

 

三、学习重点

1. 复杂度分析

  数据结构和算法的目的是更省、更快地存储和处理数据,因此需要一个考量效率和资源消耗的方法,这就是复杂度分析。它是这门课的内功根基,一定要掌握。

2. 数据结构与算法主体

  我们首先来看一张框架图,以便对数据结构与算法建立整体认识:

  

  作为非算法工程师,并不需要掌握上图所有知识点。很多高级的数据结构与算法在日常开发中很少用到,比如二分图、最大流等。学习要抓主要矛盾,攻克下面两个“十大”,就足够应对面试和日常工作了:

  十大数据结构

  数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;

  十大算法

  递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。

  掌握了这些基础的数据结构和算法,再学更加复杂的数据结构和算法,就很容易上手。

 

四、学习方法

  学习数据结构和算法,是非常好的思维训练过程,不能死记硬背,要多辩证思考,多问为什么。

  抓住四个问题:

    • 来历
    • 自身的特点
    • 适合解决的问题
    • 实际的应用场景

1. 边学边练,适度刷题

  • 学习过程中要动手实操
  • 每周末用集中时间把当周所学的数据结构和算法,自己用代码实现一遍

  面试前刷题要适量,不要浪费太多时间。除非你要面试 Google、Facebook 这样的公司,它们的算法题目非常非常难,必须大量刷题,才能在短期内提升应试正确率。如果是应对国内公司的技术面试,即便是 BAT,只要熟练掌握原理,适度练习,就足以应对。

2. 多思考、多讨论

3. 限定时间

  上大学时看新东方的单词课,其中一个观念让我受益匪浅:学习一定要设立详尽的时间规划,不要把战线拉得太长,用集中的时间来完成学习。否则一个学期过去,你可能还停留在 abandon。我认为这是个通用的道理,学习数据结构和算法,也要给自己制定好时间规划。

4. 小目标

  在枯燥的学习过程中,可以给自己设立一个切实可行的目标,就像打怪升级一样。比如,每部分学完都写一篇博客,或者找找资料中讲得有误或者可以改善的地方。这样可以使学习形成积极的反馈。

5. 多重复

  学习是反复迭代、不断沉淀的过程,不要期望一蹴而就。有些知识点学了一遍,不能透彻理解,这是正常的。反复学习几次,一定能“温故而知新”。

posted @ 2020-04-11 14:43  Albert-陌尘  阅读(564)  评论(0编辑  收藏  举报