目标
- 建立时间复杂度、空间复杂度意识,写出高质量的代码
- 能够设计基础架构
- 提高编程技能
- 训练逻辑思维
什么是数据结构
广义:一组数据的存储结构 | 操作数据的一种方法
解决问题:如何更快更省的处理数据
量化目标:复杂度分析
复杂度分析
- 测试结果非常依赖测试环境
- 测试结果受数据规模的影响很大
如何分析一段代码的时间复杂度?
- 仅关心循环执行次数最多的一段代码
- 加法法则:总复杂度 = 量级最大的那段代码的复杂度
- 乘法法则:嵌套代码的复杂度 = 嵌套内外代码复杂度的乘积
时间复杂度:
- 常数O(1):无循环、无递归
- 对数阶O(log n)/O(n log n):归并排序、快速排序
- O(m+n)、O(m*n):m 和 n 是表示两个数据规模
空间复杂度
- 最好情况时间复杂度
理想情况 - 最坏情况时间复杂度
最坏情况 - 平均时间复杂度
所有情况加权平均 - 均摊时间复杂度
a.绝大部分是低级别的复杂度,个别情况是高级别复杂度
b.发生具有时序关系
将个别高级别复杂度均摊到低级别复杂度上
基本上均摊结果就等于低级别复杂度。