时间复杂度
表示代码执行时间随数据规模增长的变化趋势,所以,也叫作渐进时间复杂度(asymptotic time complexity),简称时间复杂度。大 O 时间复杂度实际上并不具体表示代码真正的执行时间。
时间复杂度分析
- 只关注循环执行次数最多的一段代码:大 O 这种复杂度表示方法只是表示一种变化趋势。我们通常会忽略掉公式中的常量、低阶、系数,只需要记录一个最大阶的量级就可以了。
- 加法法则:总复杂度等于量级最大的那段代码的复杂度。
- 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
时间复杂度分类
1.最好情况时间复杂度:就是在最理想的情况下,执行这段代码的时间复杂度。
2.最坏情况时间复杂度:就是在最糟糕的情况下,执行这段代码的时间复杂度。
3.平均时间复杂度:加权平均值,也叫作期望值,所以平均时间复杂度的全称应该叫加权平均时间复杂度或者期望时间复杂度。
4.均摊时间复杂度:通过摊还分析得到的时间复杂度我们起了一个名字,叫均摊时间复杂度。
常见时间复杂度实例分析
多项式量级和非多项式量级。其中,非多项式量级只有两个:O(2n) 和 O(n!)。
我们把时间复杂度为非多项式量级的算法问题叫作 NP(Non-Deterministic Polynomial,非确定多项式)问题。只要算法中不存在循环语句、递归语句,即使有成千上万行的代码,其时间复杂度也是Ο(1)。在采用大 O 标记复杂度的时候,可以忽略系数
空间复杂度分析
时间复杂度的全称是渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系。空间复杂度全称就是渐进空间复杂度(asymptotic space complexity),表示算法的存储空间与数据规模之间的增长关系。
总结:时间复杂度和空间复杂度,用来分析算法执行效率与数据规模之间的增长关系,可以粗略地表示,越高阶复杂度的算法,执行效率越低。常见的复杂度并不多,从低阶到高阶有:O(1)、O(logn)、O(n)、O(nlogn)、O(n2)。