数据结构 & 算法
原文链接:https://note.noxussj.top/?source=sifo
为什么要学习数据结构和算法?
它对咱们开发和程序有什么帮忙?
像咱们平时都是应用框架和库进行开发的我的项目的,咱们也不太可能去批改库和框架的外部代码,那咱们应该如何优化咱们的程序,要从哪方面动手呢?能够通过数据处理的操作进行优化,数据处理就会波及到数据结构和算法的相干内容。
咱们的程序个别都是由数据结构和算法联合失去的一个产物(数据结构 + 算法 = 程序),数据结构为算法提供服务,算法围绕数据结构操作。
常见的数据结构
有序数据结构
- 数组
- 栈
- 队列
- 链表
无序数据结构
- 汇合
- 字典
树形数据结构
- 树
- 堆
- 图
常见的算法
链表
- 遍历链表
- 删除链表节点
- 双指针
树、图
- 深度优先搜寻
- 广度优先搜寻
- 递归
数组
- 冒泡排序
- 抉择排序
- 插入排序
- 归并排序
- 疾速排序
- 顺序搜索
- 二分搜寻
常见的算法设计思维
- 分而治之
- 动静布局
- 贪婪
- 回溯
什么是算法?
算法(Algorithm)是指用来操作数据、解决程序问题的一组办法。对于同一个问题,应用不同的算法,兴许最终失去的后果是一样的,但在过程中耗费的资源和工夫却会有很大的区别。
那么咱们应该如何去掂量不同算法之间的优劣呢?
次要还是从算法所占用的「工夫」和「空间」两个维度去考量。
- 工夫维度:是指执行以后算法所耗费的工夫,咱们通常用「工夫复杂度」来形容
- 空间维度:是指执行以后算法须要占用多少内存空间,咱们通常用「空间复杂度」来形容
因而,评估一个算法的效率次要是看它的工夫复杂度和空间复杂度状况。然而,有的时候工夫和空间却又是「鱼和熊掌」,不可兼得的,那么咱们就须要从中去取一个平衡点。
可是,咱们的代码都还没有运行起来,我怎么能预知到代码运行所耗费的工夫和空间呢?因为运行环境和输出规模的影响,代码的相对执行工夫是无奈预计的。然而咱们却能够预估出代码的基本操作执行次数和额定占用的空间。
接下来会别离介绍一下「工夫复杂度」和「空间复杂度」的计算形式。
原文链接:https://note.noxussj.top/?source=sifo