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


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

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

    1. 广义角度

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

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

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

    2. 狭义角度

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

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

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

    三、学习重点

    1. 复杂度分析

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

    2. 数据结构与算法主体

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

      

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

      十大数据结构

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

      十大算法

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

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

    四、学习方法

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

      抓住四个问题:

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

    1. 边学边练,适度刷题

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

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

    2. 多思考、多讨论

    3. 限定时间

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

    4. 小目标

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

    5. 多重复

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

  • 相关阅读:
    Can you feel my word?
    木语录
    走在风雨中
    我看平淡生活……
    Can you feel my word?
    我看平淡生活……
    留言本
    Python(七)之匿名函数lambda
    python之常用模块logging
    python(六)之面向对象
  • 原文地址:https://www.cnblogs.com/murongmochen/p/12678628.html
Copyright © 2020-2023  润新知