算法分析主要是通过时间复杂度和空间复杂度来描述的。快来通过下列例题,测试是否掌握了时间复杂度和空间复杂度的分析吧!!!
1、下面程序的时间复杂度为
for(i=1,s=0;i<=n;i++)
{
t=1;
for(j=1;j<=i;j++)
{
t=t*j;
}
s=s+t;
}
A B C D
答案:B
解析:外部循环执行n次,内部循环执行i次,则 t=t*j 该条语句执行(1+2+3+……+n)/2=n(n+1)/2次,则该程序的时间复杂度为,所以该题的答案为B。
2、设某算法完成对n个元素进行处理,所需的时间是,则该算法的时间复杂度为
A B C D
答案:B
解析:时间复杂度由最高指数项决定,常见的时间复杂度为
所以该题选B。
3、下面算法的时间复杂度为
void fun(int n)
{
int i=0,s=0;
while(s<n)
{
++i;
s=s+i;
}
}
A B C D
答案:C
解析:代码s=s+i 执行1+2+……+m=m(1+m)/2=n次,则m约等于,则该题选C。
4、下面算法的空间复杂度为
float aver(float a[n])
{
int j;
for(j=n;j>0;j--)
printf("%8.2f",a[j]);
}
A B C D
答案:C
解析:函数体定义中出现数组,数组在初始化时需要分配空间,此时空间复杂度为,所以该题的答案为C。
5、下列函数的时间复杂度为
int f(int n)
{
if(n<=0) return 1;
else return n+f(n-1);
}
A B C D
答案:B
解析:
第一步:明确该函数的基本操作,本题中的基本操作为n+f(n-1)
第二步:列出表达式。T(n)=T(n-1)+1,终止条件为if(n<=0) return 1;T(1)=1;
第三步:解出该表达式,可得时间复杂度为。
则该题选B。
6、算法复杂度通常是表达算法在最坏情况下所需要的计算量。假设算法A1在处理n个数据的时间复杂度为 ,算法A2在处理n个数据时除10次连续调用算法A1外,其它部分的时间复杂度共为.那么,算法A2的时间复杂度为
A B C D
答案:D
解析:A1的算法复杂度为,表示A1算法的执行时间是一个常量,与数据规模n无关。A2的算法可以分为两个部分,第一个部分是10次A1算法,那么执行时间是一个常量,第二部分时间复杂度为,执行时间也是一个常量,两部分之和的执行时间仍然为常量,所以时间复杂度为,所以该题选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 B C D
答案:B
解析:快速转置时:
(1) 初始化所有列的非零元素的个数统计;
(2) 统计每一列的非零元素个数;
(3) 求每一列第一个非零元素的首位置;
(4) 最够对每一个非零个数转置。
则总共时间为2(n+t),所以时间复杂度为O(n+t)。
9、某算法的时间复杂度为,表明该算法的
A 问题规模是 B 执行时间等于
C 执行时间与成正比 D 问题规模与成正比
答案:C