时间复杂度

   几种排序算法的思想很容易掌握,就是对应的时间复杂度,究其原因就是对时间复杂度是什么,如何定义计算还不知道,那么时间复杂度是如何计算的呢?请看下文。


   在说时间复杂度之前要说一下算法,算法是为解决某问题而采取的具体的有限操作步骤,既然算法是操作步骤,那么步骤占用计算机资源的多少就决定了算法的效率。而计算机资源中有时间资源(处理器)和空间资源(存储器),因此时间复杂度是描述算法效率的标准中的一种。


什么是时间复杂度

   算法中,操作重复执行的次数为算法的时间度量。

   设f(n)为描述一个算法重复执行次数的函数,这个算法的时间复杂度即为O(f(n))。这里只需求的函数(f(n))的增长率。

例题1:

                f(n)=n^3+3n        O(f(n))=n^3

                f(n)=2                 O(f(n))=1

                f(n)=logn+n        O(f(n))=logn


如何求解

    现在如果给定我们一个算法的函数,我们肯定可以特别轻松的写出时间复杂度,但是,函数往往不直接给我们,给我们的是一段代码,我们是否很容易的求出时间复杂度呢?

如下:

例题2.1:

for(i=1;i<=n;++i){
    for(j=1;j<=n;++j){
         ++x;
         s+=x;
    }
}                 
分析: 1)第一个for循环重复的次数为n

            2)第二个for重复的次数也为n

            3)两个for是嵌套的,程序总的重复次数为n^2

            4)时间复杂度即为n^2


例题2.2:

i=1;                    
while(i<=n){
      i=i*2; 
}

分析:1)设重复的次数为m

           2)i=1 循环一次i的值都乘以2, m次循环后i的值就不满足小于等于n了,得函数i*(2^m)>n (i=1)

           3)求得重复次数m=log2(n/i),即得时间复杂度

说明:上题中i如果不为1时,时间复杂度还是log2(n/i),原因是求的是函数的增长率。


好了,现在我们知道了如何去求时间复杂度的函数及时间复杂度,单个的函数能求出来,那么多个函数在一块呢?就好比我们会算加法、减法和乘法,那么混合运算怎么算呢? 复合的程序中就能写出多个时间复杂度的函数,整个函数的时间复杂度如何计算就好比混合运算的优先级,是有规则的,请继续看:


时间复杂度的表示法则

   加法法则:

   针对并列程序
   O(f(n1))+O(f(n2))=O(  max(f(n1),f(n2))  )

   乘法法则:

   针对嵌套程序
   O(f(n1))*O(f(n2))=O( f(n1)*f(n2) )

   

   特例:若其中有一个为常数c 

   f(n1)=c  O(f(n1))*O(f(n2))=O( c*f(n2) ) = O( f(n2) )

    

例3:

{
   for ( int i = 0; i < m; i++ ) {   
          sum[i] = 0;                      

          for ( int j = 0; j < n; j++ ) {
	    sum[i] += x[i][j]; 
          }     
   } 
   for ( i = 0; i < m; i++ ) {
          System.out.println(i);
   }
}

分析: 1)嵌套的两个for循环,用乘法法则得:O(m*n)

            2)第三个for循环,时间复杂度为O(m)

            3)利用加法法则得:时间复杂度为O(  max(O(m*n),O(m))  )


  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值