图解算法数据结构一 - 算法复杂度
算法复杂度
1. 算法复杂度旨在输入数据量N的情况下, 算法的时间和空间使用情况, 体现算法运行使用的时间和空间随数据大小N而增大的速度。
算法复杂度主要可以从时间,空间两个角度评价:
- 时间: 假设各操作的运行时间为固定常数, 统计算法运行的计算操作的数量, 以代表算法运行所需时间
- 空间: 统计在最差情况下, 算法运行所需使用的最大空
2. 时间复杂度
根据输入数据的特点, 时间复杂度具有最差, 平均, 最佳三种情况:
for num in nums: if num == 7: return True return False
最佳情况: 数组首数字为7, 无论nums 有多少元素, 线性查找的循环次数都为1次。
最差情况: nums中所有数字不为7, 此时线性查找会遍历这个数组, 循环N次
平均情况:需要考虑输入数据的分布情况,计算所有数据下的平均时间复杂度。
3. 常见的时间复杂度
根据从小到大排列, O(1) < O(logN) < O(N) < O(NlogN) < O(N2) < O(2N) < O(N!)
4. 空间复杂度
空间复杂度涉及的空间类型有:
- 输入空间: 存储输入数据所需的空间大小
- 暂存空间: 算法运行过程中, 存储所有中间变量和对象等数据所需的空间大小
- 输出空间: 算法运行返回时, 存储输出数据所需的空间大小
6. 常见的空间复杂度
根据从小到大排列, O(1) < O(logN) < O(N) < O(N2) < O(2N)