算法复杂度分析
1、时间复杂度的由来
用来计算一段代码的执行时间
2、大O时间复杂度表示法
- 只表示数据规模n很大时候的执行效率。
- 忽略低阶、常量、系数只保留高阶的部分。
- 表示执行时间随数据规模的增长趋势,而不是执行时间。
3、常见时间复杂度量级
- O(1)常量级 哈希表上的操作。
- O(logn)对数级 二分查找、跳表等操作。
- O(n)线性 数组和链表的遍历、二叉树的遍历。
- O(nlogn) 快速排序、归并排序。
- O(n^2) 冒泡插入。
- O(2^n)指数级 斐波那契数列。
- O(n!)比较少见 求空排列。
分析一段代码的复杂度时应该从三种情况:
- 最好的情况
- 最差的情况
- 平均情况
还有一种不常见的均摊复杂度,对某个数据结构进行一组连续操作大部分时间都很地,个别情况下比较高,我们可以将这一组操作放在一块分析,看能否将耗时多的操作均摊到耗时少的操作上。常见的就是支持动态的拓容的数据结构。一般情况下均摊等于最好的复杂度。
4、空间复杂度分析
- 分析最高的内存占用空间
- 时间复杂度是累计