数据结构与算法(1)-概述
1. 为什么要学习数据结构与算法?
入职已经快1年的时间了,自己在这一年中确实有很多收获,涨了很多架构上的知识,对于工程上的代码流程有了更深一步的了解。不过愈发感觉到数据结构与算法的重要性,因为在服务出现bug的时候,除了业务逻辑上的问题,剩下的大部分都是数据结构操作上的一些问题,比如常见的Index out of bound,诸如此类。
我想与其说数据结构与算法是进入大厂的敲门砖,不如说二者是一个优秀工程师和一个CRUD 男孩的分水岭。很多时候,对于基础的理解决定了你的上限,要知道底层的知识是相通的,我们看到的很多现在的新兴技术,实际上底子上还是用的那些十年前,二十年前的理念。学习数据结构与算法,可以算得上是想要去掌握一把屠龙刀。无论遇到什么,庖丁解牛一般。
在工业界,讲道理对于业务工程师来说,大部分时间都在使用封装好的接口,类库,并翻译业务逻辑,很少需要自己实现数据结构和算法。但是,不用自己实现不代表不需要去了解。
依旧需要知道这背后的原理;需要懂得分析时间、空间的复杂度;需要能够分辨出几个相似的数据结构的不同;调用了某个函数之后,需要知道如何评估代码的性能和资源的消耗。
学习数据结构与算法,是为了让自己有能够成长起来的油/ 源。
2. 如何学习?
首先,数据结构与算法的关系是:数据结构为算法服务,而算法要作用在特定的数据结构之上。
数据结构是静态的,是组织数据的一种方式。我们需要在其基础上操作、构建算法,孤立存在的数据结构是没用的。
- 复杂度分析
- 数据结构与算法是解决如何更省,更快的存储和处理数据的问题
- 复杂度分析就是对应的考量效率和资源消耗的方法
- 数据结构算法树状图
- 复杂度分析
- 空间复杂度
- 时间复杂度
- 最好
- 最坏
- 平均
- 均摊
- 基本算法思想
- 贪心
- 分治
- 动态规划
- 回溯
- 枚举
- 排序
- O(n^2)
- 冒泡排序
- 插入排序
- 选择排序
- 希尔排序
- O(nlogn)
- 归并排序
- 快速排序
- 堆排序
- O(n)
- 计数排序
- 基数排序
- 桶排序
- O(n^2)
- 搜索
- 深度优先搜索
- 广度优先搜索
- 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" 转载请保留原文链接及作者。