每日算法之时间复杂度理解

时间复杂度

  1. 时间复杂度的表示方式用符号来表示就是大O。

T(n)=O(f(n))
其中,T(n)就是算法的时间复杂度;
f(n)表示执行与算法优劣和问题规模有关的执行数;
O()表示一种运算符号,和加减乘除类似。作用就是去除其他项,包括与最高项相乘的常数,只保留最高项,比如f(n)=2n^2+1,O(f(n))=O(n^2)

  1. 常见的时间复杂度量级进行大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)。

参考资料:

  1. 如何清晰的理解算法中的时间复杂度?
  2. 快速排序算法C++实现[评注版]
  3. 快速排序算法的时间复杂度分析[详解Master method]
欢迎关注我的公众号:沉迷Spring
显示 Gitment 评论
0%