时间复杂度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)

o, o(n), o(logn), o(nlogn)

o, o(n), o(logn), o(nlogn)算法复杂度

o, o(n), o(logn), o(nlogn)

算法复杂度实例 -- O O(n) O(logN) O(NlogN)