时间复杂度
- 时间复杂度的表示方式用符号来表示就是大O。
T(n)=O(f(n))
其中,T(n)就是算法的时间复杂度;
f(n)表示执行与算法优劣和问题规模有关的执行数;
O()表示一种运算符号,和加减乘除类似。作用就是去除其他项,包括与最高项相乘的常数,只保留最高项,比如f(n)=2n^2+1,O(f(n))=O(n^2)
- 常见的时间复杂度量级进行大O的理解:
常数阶O(1)
无论代码执行了多少行,其他区域不会影响到操作,这个代码的时间复杂度都是O(1)
void swapTwoInts(int &a, int &b){
int temp = a;
a = b;
b = temp;
}
线性阶O(n)
一个普通for循环里面的代码会执行 n 遍,因此它消耗的时间是随着 n 的变化而变化的,因此可以用O(n)来表示它的时间复杂度
平方阶O(n²)
存在双重循环的时候,即把 O(n) 的代码再嵌套循环一遍,它的时间复杂度就是 O(n²) 了
对数阶O(logn)
比如一个函数,总是把参数除以2,既:n/2,折半查找的核心步骤就是这个。那么最终函数运行时间,应该是:log n,也就是O(log n)
线性对数阶O(nlogn)
将时间复杂度为O(logn)的代码循环N遍的话,那么它的时间复杂度就是 n * O(logn),也就是了O(nlogn)。
参考资料: