了解数据结构中时间复杂度
时间复杂度是描述算法效率的一种量度,记作:
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)