时间复杂度O O(n) O(logn) O(nlogn)是什么意思?
Posted 早起的年轻人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了时间复杂度O O(n) O(logn) O(nlogn)是什么意思?相关的知识,希望对你有一定的参考价值。
在你渐渐迷失在你的人生道路上的时候,千万不要因为走的太久,而忘记了我们为什么出发,做码农,也要清楚自己如何才能用有效的土地种植出 出色的产品,于是细节就需要把握一下。
如果你有兴趣可以关注一下公众号 biglead 我的大前端生涯,获取每日学习资料
在描述算法复杂度时,经常用到O(1), O(n), O(logn), O(nlogn)来表示对应复杂度程度,可以用于表示时间复杂度,也用于表示空间复杂度。
类别 | 描述 |
---|---|
O(1) | 耗时与输入数据量大小无关 |
O(n) | 数据量增大几倍,耗时也增大几位 |
O(n^2) | 对 n 个数进行排序,需要扫描 n X n 次 |
O(logn) | 当数据量增大 n 倍时 ,扫描次数增大 logn 次(以2为底数) |
O(nlogn) |
时间复杂度的推导遵循3个原则:
- 如果运行时间跟n无关,是常数,则时间复杂度是O(1);
- 只保留时间函数中的最高阶项;
- 去掉高阶项前面的系数;
1 O(1)
若运行时间跟n的取值无关,即无论n取什么值,我的运行时间都不会变,则时间复杂度为O(1),只要基本操作执行次数是个常量,时间复杂度都为O(1)。
2 O(n)出现情况
O(n)一般出现在只有一个循环的情况下,执行次数是线性的,如下:
public void test(int number) {
for(int i = 0 ; i < number ; i++) {
... 其他代码
}
}
3 O(n^2)出现情况
O(n^2)一般出现在有嵌套循环的情况下
public void test(int n) {
int a = 1;
int b = 1;
for(int i = 0 ; i < n ; i++) {
for(int j = 0 ; j < n ; j++) {
a++;
}
b++;
}
}
上术循环中执行次数是 n x n 次 ,时间复制度为O(n^2)
以上是关于时间复杂度O O(n) O(logn) O(nlogn)是什么意思?的主要内容,如果未能解决你的问题,请参考以下文章
算法 -- o, o(n), o(logn), o(nlogn)