美文网首页
时间复杂度

时间复杂度

作者: test_java | 来源:发表于2017-10-23 11:34 被阅读0次

    分析一个时间的复杂度,推导大O的阶

     1.用常数1取代运行时间中的所有加法常数
     2.在修改后的运行次数的函数中,只保存最高阶项
     3.如果最高阶项存在且不是1 ,则去除与这个项相乘的常数
     4.得到的最后结果就是大O阶
    

    判断这个的时间复杂度

         int  i = 0 , n =  100;
         while(i < n){
          i = i *2;
    }
    

    由于2^x = n 得到 x = log(2)n ,所以这个循环的时间复杂度为O(logn).

      int i, j ;
      for(i = 0; i < n ; i++){
          function(1);
    }
    void function( int count){
        printf("%d", count);
    }
    

    函数体打印的这个参数,function 函数的时间复杂度是O(1) ,所以整体的时间复杂度就是O(n)

     void function(int count){
          int j ;
        for(j =count; j < n ; j++){
        printf("%d",j);
      }
    }
    

    function 的内部循环次数随count的增加(接近n)而减少, 算法的时间复杂度为O(n^2)

     n++;
     function(n);
    for(i =0; i < n; i++){
        function(i);
    }
    for(i = 0; i < n ; i++){
        for( j = i; j < n; j++){
      printf("%d",j);
    }
    }
     void function(int count){
          int j ;
        for(j =count; j < n ; j++){
        printf("%d",j);
      }
    }
    
    例子 时间复杂度 术语
    521314 O(1) 常数阶
    3n+4 O(n) 线性阶
    3n^2+4n+5 O(n^2) 平方阶
    3log(2)n+4 O(logn) 对数阶
    2n+3log(2)n+14 O(nlogn) nlogn阶
    n3+2n2+4n+6 O(n^3) 立方阶
    2^2 O(2^n) 指数阶

    常用的时间复杂度耗费的时间从小到大是
    O(1) < O(logn)<(n) <O(nlogn) < O(n^2) < O(n^3) <O(2^n)<O(n!)<O(n*n)

    相关文章

      网友评论

          本文标题:时间复杂度

          本文链接:https://www.haomeiwen.com/subject/zemouxtx.html