数据结构与算法(1)-概述

  1. 1. 为什么要学习数据结构与算法?
  2. 2. 如何学习?
    1. 2.1 最常用的基础总结

1. 为什么要学习数据结构与算法?

入职已经快1年的时间了,自己在这一年中确实有很多收获,涨了很多架构上的知识,对于工程上的代码流程有了更深一步的了解。不过愈发感觉到数据结构与算法的重要性,因为在服务出现bug的时候,除了业务逻辑上的问题,剩下的大部分都是数据结构操作上的一些问题,比如常见的Index out of bound,诸如此类。

我想与其说数据结构与算法是进入大厂的敲门砖,不如说二者是一个优秀工程师和一个CRUD 男孩的分水岭。很多时候,对于基础的理解决定了你的上限,要知道底层的知识是相通的,我们看到的很多现在的新兴技术,实际上底子上还是用的那些十年前,二十年前的理念。学习数据结构与算法,可以算得上是想要去掌握一把屠龙刀。无论遇到什么,庖丁解牛一般。

在工业界,讲道理对于业务工程师来说,大部分时间都在使用封装好的接口,类库,并翻译业务逻辑,很少需要自己实现数据结构和算法。但是,不用自己实现不代表不需要去了解。

依旧需要知道这背后的原理;需要懂得分析时间、空间的复杂度;需要能够分辨出几个相似的数据结构的不同;调用了某个函数之后,需要知道如何评估代码的性能和资源的消耗。

学习数据结构与算法,是为了让自己有能够成长起来的油/ 源。

2. 如何学习?

首先,数据结构与算法的关系是:数据结构为算法服务,而算法要作用在特定的数据结构之上。

数据结构是静态的,是组织数据的一种方式。我们需要在其基础上操作、构建算法,孤立存在的数据结构是没用的。

  • 复杂度分析
    • 数据结构与算法是解决如何更省,更快的存储和处理数据的问题
    • 复杂度分析就是对应的考量效率和资源消耗的方法

fig1.png

  • 数据结构算法树状图
    • 复杂度分析
      • 空间复杂度
      • 时间复杂度
        • 最好
        • 最坏
        • 平均
        • 均摊
    • 基本算法思想
      • 贪心
      • 分治
      • 动态规划
      • 回溯
      • 枚举
    • 排序
      • O(n^2)
        • 冒泡排序
        • 插入排序
        • 选择排序
        • 希尔排序
      • O(nlogn)
        • 归并排序
        • 快速排序
        • 堆排序
      • O(n)
        • 计数排序
        • 基数排序
        • 桶排序
    • 搜索
      • 深度优先搜索
      • 广度优先搜索
      • A启发式搜索
    • 查找
      • 线性表查找
      • 树结构查找
      • 散列表查找
    • 字符串匹配
      • 朴素
      • KMP
      • Robin-Karp
      • Boyer-Moore
      • AC自动机
      • Trie
      • 后缀数组
      • 存储
        • 邻接矩阵
        • 邻接表
      • 拓扑排序
      • 最短路径
      • 关键路径
      • 最小生成树
      • 二分图
      • 最大流
      • 二叉树
        • 平衡二叉树
        • 二叉查找树
        • 平衡二叉查找树
          • AVL树
          • 红黑树
        • 完全二叉树
        • 满二叉树
      • 多路查找树
        • B 树
        • B+ 树
        • 2-3 树
        • 2-3-4 树
        • 小顶堆
        • 大顶堆
        • 优先级队列
        • 斐波那契堆
        • 二项堆
      • 其他
        • 梨形数组
        • 线段树
    • 散列表
      • 散列函数
      • 冲突解决
        • 链表法
        • 开放寻址
        • 其他
      • 动态扩容
      • 位图
    • 线性表
      • 数组
      • 链表
        • 单链表
        • 双向链表
        • 循环链表
        • 双向循环链表
        • 静态链表
        • 顺序栈
        • 链式栈
      • 队列
        • 普通队列
        • 双端队列
        • 阻塞队列
        • 并发队列
        • 阻塞并发队列

2.1 最常用的基础总结

  • 数据结构
    • 数组
    • 链表
    • 队列
    • 散列表
    • 二叉树
    • 跳表
    • Trie树
  • 算法
    • 递归
    • 排序
    • 二分查找
    • 搜索
    • 哈希算法
    • 贪心算法
    • 分治算法
    • 回溯算法
    • 动态规划
    • 字符串匹配算法

对于数据结构和算法,要学习的是:

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

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 stone2paul@gmail.com

文章标题:数据结构与算法(1)-概述

文章字数:1.1k

本文作者:Leilei Chen

发布时间:2020-02-09, 14:39:44

最后更新:2020-02-09, 14:40:41

原始链接:https://www.llchen60.com/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95-1-%E6%A6%82%E8%BF%B0/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏