时间复杂度的了解

了解数据结构中时间复杂度

时间复杂度是描述算法效率的一种量度,记作:

T(n)=O(f(n))

f(n)是正整数n的一个函数,n可以理解为问题的规模,随着问题规模的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的时间复杂度。另外我们还要了解频度的概念,频度指的是该语句重复执行的次数。我们用基本操作:“x增1”来举例。

1.{++x}//++x与x++都表示x增1,但++x是先自增1再计算x的值,x++是先计算x的值再增1此处x增1重复执行了一次,时间复杂度为O(1)

2.for(i=1;i<=n;++i){++x;}此处因为有循环,循环一次执行一次,时间复杂度为O(n)

3.此处是双层循环,外层循环一次,内层循环n次,时间复杂度为O(n^2)

for(j=1;j<=n;++j){
 for(k=1;k<=n;++k){
  ++x;
 }
}

了解到了时间复杂度,我们看看时间复杂度的比较:

在这里插入图片描述

就跟高中数学里函数一样,时间复杂度遵循函数增长规律,增长越快的重复次数越多,频度越高越复杂。因此在程序较为复杂难以求出准确循环次数时,我们就考虑他的问题规模增长率。

2n>1/2n3>5n^2>100n>200log2n,常数忽略不计,增长率就按这个记。

辨认的简单办法:

1.简单但不一定准确的确认方法,就是看看有几层循环,复杂度就是n的几次方,假如有m层循环,复杂度就是n^m.

2.如果一个算法里有多个部分,每个部分时间复杂度不一样,那么取最其中最大的时间复杂度。

3.对于条件判断语句,同样取其中时间复杂度最大的路径作为总的时间复杂度。

详细解释推荐看这位博主的文章

//www.jianshu.com/p/f4cca5ce055a)

猜你喜欢

转载自blog.csdn.net/qq_43652113/article/details/106637577