时间复杂度和空间复杂度(例题)

算法分析主要是通过时间复杂度和空间复杂度来描述的。快来通过下列例题,测试是否掌握了时间复杂度和空间复杂度的分析吧!!!

1、下面程序的时间复杂度为

for(i=1,s=0;i<=n;i++)
{
   t=1;
   for(j=1;j<=i;j++)
   {
      t=t*j;
   }
   s=s+t;
}

A O(n)                B O(n\: ^{2})                         C O(n^{3})                       D O(n^{^{4}})

答案:B

解析:外部循环执行n次,内部循环执行i次,则 t=t*j 该条语句执行(1+2+3+……+n)/2=n(n+1)/2次,则该程序的时间复杂度为O(n\: ^{2}),所以该题的答案为B。

 2、设某算法完成对n个元素进行处理,所需的时间是T(n)=n\log_2{n}+5n^{2}+100n,则该算法的时间复杂度为

O(n)                    B O(n\: ^{2})                 C O(n\log_2{n}+n)           D O(n\log_2{n})

答案:B

解析:时间复杂度由最高指数项决定,常见的时间复杂度为

O(1)<O(\log_2{n})<O(n)<O(n\log_2{n})<O(n^{2})<O(n^{3})<O(2^{n})<O(n!)<O(n^{n})

所以该题选B。

3、下面算法的时间复杂度为

void fun(int n)

{

   int i=0,s=0;

   while(s<n)

   {

       ++i;

       s=s+i;

   }

}

  A O(n)                    B O(n\: ^{2})                 C O(\sqrt{n})                D O(n\log_2{n})

答案:C

解析:代码s=s+i 执行1+2+……+m=m(1+m)/2=n次,则m约等于\sqrt{n},则该题选C。 

4、下面算法的空间复杂度为

float aver(float a[n])

{

   int j;

   for(j=n;j>0;j--)

      printf("%8.2f",a[j]);

}

O(1)                 B O(\log_2{n})                 C O(n)                    D O(n\: ^{2})

答案:C

解析:函数体定义中出现数组,数组在初始化时需要分配空间,此时空间复杂度为O(n),所以该题的答案为C。  

5、下列函数的时间复杂度为

int f(int n)

{O(10n+1)

   if(n<=0) return 1;

   else return n+f(n-1);

}

 A  O(\log_2{n})       B  O(n)                  C O(n\log_2{n})           D O(n\: ^{2})

答案:B

解析:

第一步:明确该函数的基本操作,本题中的基本操作为n+f(n-1)

第二步:列出表达式。T(n)=T(n-1)+1,终止条件为if(n<=0) return 1;T(1)=1;

第三步:解出该表达式,可得时间复杂度为O(n)

则该题选B。 

6、算法复杂度通常是表达算法在最坏情况下所需要的计算量。假设算法A1在处理n个数据的时间复杂度为 O(1),算法A2在处理n个数据时除10次连续调用算法A1外,其它部分的时间复杂度共为O(1).那么,算法A2的时间复杂度为

  A  O(n)               B  O(\log_2{n})              C O(10n+1)            D O(1)

答案:D

解析:A1的算法复杂度为O(1),表示A1算法的执行时间是一个常量,与数据规模n无关。A2的算法可以分为两个部分,第一个部分是10次A1算法,那么执行时间是一个常量,第二部分时间复杂度为O(1),执行时间也是一个常量,两部分之和的执行时间仍然为常量,所以时间复杂度为O(1),所以该题选D。

7、算法的时间复杂度是指

A 算法执行的绝对时间

B 随着问题规模n的增大,算法执行时间的增长趋势

C 算法中执行语句的条数

D 获得算法执行时间的复杂程度 

 答案:B

解析:算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间度量记作T(n)=O(f(n)),它表述随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作时间复杂度。

8、假设包含t个非零元素按的稀疏矩阵A含有m行n列,并采用三元组顺序表压缩存储,其快速转置算法的时间复杂度为

A  O(m+t)                 B O(n+t)                  C O(m+n)              D O(m*n)

答案:B

解析:快速转置时:

(1) 初始化所有列的非零元素的个数统计O(n)

(2) 统计每一列的非零元素个数O(t);

(3) 求每一列第一个非零元素的首位置O(n)

(4) 最够对每一个非零个数转置O(t)

则总共时间为2(n+t),所以时间复杂度为O(n+t)。

9、某算法的时间复杂度为O(n\: ^{2}),表明该算法的

       A 问题规模是n^{2}                                                 B 执行时间等于n^{2}           

      C 执行时间与n^{2}成正比                                     D 问题规模与n^{2}成正比

答案:C

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值