关于算法的时间复杂度的一些认识
算法的时间复杂度分析主要是分析算法的运算时间,即算法执行所需要的基本操作数。
算法时间复杂度的求解步骤:
1、找出算法中的基本语句
算法中执行次数最多的那条语句就是基本语句,通常是for循环语句。
2、计算基本语句的执行次数T(n)
算出上面每一个for循环语句的执行次数
并列for循环,各个循环的执行次数相加得T(n)
嵌套for循环,各个循环的执行次数相乘得T(n)
3、计算T(n)的数量级
求T(n)的数量级,只要将T(n)进行如下一些操作:
忽略常量、低次幂和最高次幂的系数
4、用O表示时间复杂度即可
看一个例子就明白了:
(1) int num1, num2;
(2) for(int i=0;i<n; i++){
(3) num1 += 1;
(4) for(int j=1; j<=n; j*=2){
(5) num2 += num1;
(6) }
(7) }
分析:
1、分析语句,很清楚的看到有两个for循环,并且是嵌套的
语句(1)可以跳过;
语句(2),for循环语句;
语句i<n; i++; num1+=1; j=1; 的频度为n;
语句j<=n; j*=2; num2+=num1;的频度为n*log2n;
T(n) = 2 + 4n +3n*log2n
2.计算每个循环的执行次数
外循环,i<n; i++;num1+=1;执行次数为n;
内循环,j<=n; j*=2;num2+=num1;执行次数为n*log2n;
T(n) = n+n*log2n
这里执行次数最多的语句是num2+=num1
3.忽略掉T(n)中的常量、低次幂和最高次幂的系数
该算法时间复杂度为O(n*log2n)
以上也只是一个简单的计算时间复杂度的方法,对于一些求算法时间复杂度的题感觉够用了。算法这一块没有时间深究,做题时更要细心,不能放弃。