复杂度
定义
复杂度又称渐进复杂度,包括时间复杂度和空间复杂度。
复杂度用来分析算法执行时间或占用空间随数据规模的增长关系
越高阶的复杂度算法,执行效率越低。
用途,为什么用?
- 借助复杂度分析,有利于编写性能更优的代码,降低成本
- 复杂度分析不依赖执行环境,成本低,效率高,易操作,指导性强,是一套理论方法
时间复杂度
- 表示算法的执行时间与数据规模之间的增长关系
空间复杂度
- 表示算法的存储空间与数据规模之间的增长关系
使用
常见复杂度表达式
- 从低到高:O(1) -> O(logn) -> O(n) -> O(nlogn) -> O(2n)
时间复杂度分析
- 大O复杂度表示法:T(n) = O(f(n)),公式中的O,表示代码的执行时间 T(n) 与 f(n) 表达式成正比
只关注循环执行次数最多的一段代码
总复杂度等于量级最大的那段代码的复杂度
嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
- 平均时间复杂度:代码在所有情况下执行的次数的加权平均值
- 均摊时间复杂度:极少数高级别复杂度且发生具有时序关系时,可将这几个高级别的复杂度均摊到低级别复杂度上,正常情况下均摊结果==低级别复杂度
空间复杂度分析
与时间复杂度分析类似,关注算法的存储空间与数据规模之间的增长关系