1. 时间复杂度: 估算执行指令的执行次数
2. 空间复杂度: 估算占用的内存空间
3. 大O表示法
大O表示法是一种粗略的估算模型, 公式
T(n) = O(f(n))
T(n)表示代码的执行时间;
n表示数据规模大小;
f(n)表示每行代码执行的次数和,是一个表达式;
O表示执行时间T(n)和f(n)表达式成正比
因为时间复杂度是表示的一种趋势,所以常常忽略常量、低阶、系数,只需要最大阶量级就可以了。
分析时间复杂度的几个常见法则
1、只关注代码执行最多的一段代码
上面例子可以看出,复杂度忽略了低阶、常量和系数,所以执行最多的那一段最能表达时间复杂度的趋势。
2、加法法则:总复杂度等于各部分求和,然后取复杂度量级最高的
还是上面的例子,总的时间复杂度等于各部分代码时间复杂度的和,求和之后再用最能表达趋势的项来表示整段代码的时间复杂度。
3、乘法法则:嵌套代码复杂度等于嵌套内外代码复杂度的乘积
上面第二段代码,j 循环段嵌套在 i 循环内部,所以 j 循环体内的时间复杂度等于单独 i 的时间复杂度乘以单独 j 的时间复杂度。
常见的时间复杂度表示
常量阶:O(1)
对数阶:O(logn)
线性阶:O(n)
线性对数阶:O(nlogn)
平方阶:O(n²)、立方阶O(n³)……
指数阶:O(2ⁿ)
阶乘阶:O(n!)
参考
[1]: 复杂度分析
[2]: 时间与空间复杂度的讲解