大O
大O时间复杂度表示代码随着数据规模增长的变化趋势
注意点:
只关注执行最多的一段代码
加法法则:总复杂度等于量级最大的那段代码的时间复杂度
乘法法则:嵌套的代码的复杂度等于嵌套内外代码复杂度的乘积
常见的时间复杂度
常量阶 O(1)
指数阶 O(2的N次方)
对数阶 O(logN)
阶乘阶 O(N!)
线性阶 O(N)
线性对数阶 O(N * logN)
平方阶 O(N的2次方)
立方阶 O(N的3次方)
K方阶 O(N的K次方)
可以粗略地表示,越高阶复杂度的算法,执行效率越低。常见的复杂度并不多,从低阶到高阶有:O(1)、O(logn)、O(n)、O(nlogn)、O(n2)
最好:最好时间复杂度表示:最理想状态下执行这段代码的时间复杂度。比如排序一段数组结果本身就是有序的。
最坏:最坏时间复杂度表示:最糟糕状态下执行这段代码的时间复杂度。
平均:又叫加权平均时间复杂度或者期望时间复杂度。是 情况与出现这情况的概率的乘积的总和。
均摊:均摊时间复杂度,又叫摊还分析法。均摊时间复杂度就是一种特殊的平均时间复杂度。
思路:每一次 O(n) 的插入操作,都会跟着 n-1 次 O(1) 的插入操作,所以把耗时多的那次操作均摊到接下来的 n-1 次耗时少的操作上,均摊下来,这一组连续的操作的均摊时间复杂度就是 O(1)。这就是均摊分析的大致思路。
空间复杂度:算法的存储空间与数据规模之间的增长关系,也可以用大O分析法表示