算法的时间复杂度计算及知识点

时间复杂度:基本操作重复执行的次数

常见的算法时间复杂度从小到大依次为:

O(1) < O(log2n) < O(n) < O(nlog2n) < O(n^2) < O(n^3) ......< O(2n) < O(n!)

时间复杂度通常使用大O渐近表示法(括号内就是算法执行的次数)

推到法:

1.若括号内是常数都写成O(1)

2.若括号内是多项式 例如O(n^2+3n+9)则只保留最高次项:n^2

3.若是最高次项的系数不为1则统一写成1

例题:

1.

for(int i=0; i<n; i++){

   for(int j=i; j<n; j++){

       printf("执行一次");    

        }

}

解题思路及答案:

先看外层循环:循环n次;再看内部循环:循环n次—1*n*n=O(n^2)

2.

        for(int i=0 ; i<n ; ++i){

                for(int j=0 ; j<n ; ++j){

                        printf("数据结构好难")

                  }

}

        for(int i=0 ; i<n; ++i){

                        printf("数据结构真的好难")

                  }

解题思路及答案:

第一个是双重循环 ,执行了n*n=n^2,第二个是一重循环,执行了n次;总执行:n^2+n;但是这里必须使用最高次项来表示复杂度:n^2

3.

        for(int i=0 ; i<n ; ++i){

                for(int j=i ; j<n ; ++j){

                        printf("数据结构好难")

                  }

}

解题思路及答案:

当i=0时,里层执行n次;当i=1时,里层执行(n-1)次;当i=2时,里层执行(n-2)次;当i=3时,里层执行(n-3)次以此类推:我们只需要把里层的次数相加—n*(n-1)/2=n^2/2-n/2=O(n^2)

4.

  for(int i=1 ; i<n ; i*=2){

                        printf("数据结构好难")

                  }

解题思路及答案:

首先我们先设n=8,T(8)=3,2^3=2^T(8)=8

                      n=16,T(16)=4;2^4=2^T(16)=16

以此类推:2^T(n)=n;T(n)=(log2n)--->T(n)=O(logn)

补充(对数):a^?=b—>?=logab(以a为底b的对数)

5.

int x = 90;
int y = 100;
     while (y > 0){
          if (x > 100){
              x = x - 10;
              y--;
          }
          else
          {
              x++;
          }
     }
解题思路及答案:

这段代码里只有常量,所以时间复杂度只有O(1)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值