您的位置:首页 > 理论基础 > 数据结构算法

数据结构考研时间复杂度分析学习

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

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

什么是时间复杂度

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

   设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:

[csharp] view
plain copy

 print?

<span style="font-size:18px">for(i=1;i<=n;++i){  

    for(j=1;j<=n;++j){  

         ++x;  

         s+=x;  

    }  

}                 </span>  

分析: 1)第一个for循环重复的次数为n

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

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

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

例题2.2:

[csharp] view
plain copy

 print?

<span style="font-size:18px">i=1;                      

while(i<=n){  

      i=i*2;   

}</span>  

分析: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:

[csharp] view
plain copy

 print?

<span style="font-size:18px">{  

   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);  

   }  

}</span>  

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

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

            3)利用加法法则得:时间复杂度为O(  max(O(m*n),O(m))  )
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: