1-1
算法分析的两个主要方面是时间复杂度和空间复杂度的分析。(T)
1-2
N2logN和NlogN2具有相同的增长速度(F)
[解析]一个N^2logN 一个2NlogN,肯定第一个快
1-3
2N和NN具有相同的增长速度。(F)
[解析]求导
1-6
在任何情况下,时间复杂度为O(n^2) 的算法
比时间复杂度为O(n*logn)的算法所花费的时间都长。(F)
[解析]数据规模小的时候n^2要快
1-7
对于某些算法,随着问题规模的扩大,所花的时间不一定单调增加。(T)
[解析]O(1)所花时间始终不变,其余的算法都随规模递增
2-1
下面代码段的时间复杂度是()。(D)
x=n; //n>1
y=0;
while( x≥(y+1)*(y+1) )
y++;
A.O(1)
B.O(n1/2)
C.O(n)
D.O(log2n)
[解析]代码等同于 for (int y = 1; y * y <= n; y++) ;
时间复杂度 O(log2N)
2-2
下列代码
if ( A > B ) {
for ( i=0; i<NN/100; i++ )
for ( j=NN; j>i; j-- )
A += B;
}
else {
for ( i=0; i<N2; i++ )
for ( j=N3; j>i; j-- )
A += B;
}
的时间复杂度是:(D)
A.O(N^3)
B.O(N^4)
C.O(N^5)
D.O(N^6)
[解析]不会分析
2-3
下列函数
int func ( int n )
{ int i = 0, sum = 0;
while ( sum < n ) sum += ++i;
return i;
}
的时间复杂度是:(B)
A.O(logn)
B.O(n^(1/2))
C.O(n)
D.O(nlogn)
[解析]sum = 1 + 2 + … + n = (n)(n + 1)/2
i 约等于 n^(1/2)
2-4
下列代码
for(i=0; i<n; i++)
for(j=i; j>0; j/=2)
printf(“%d\n”, j);
的时间复杂度是:(D)
A.O(N×i)
B.O(N)
C.O(N^2)
D.O(NlogN)
[解析]第一层循环的复杂度是N,第二层是logN
2-5
下面代码段的时间复杂度是()。(B)
x=0;
for( i=1; i<n; i++ )
for ( j=1; j<=n-i; j++ )
x++;
A.O(n)
B.O(n^2)
C.O(n^3)
D.O(2^n)
[解析]外层循环是N,内层是N-i
2-6
要判断一个整数N(>10)是否素数,我们需要检查3到√N之间
是否存在奇数可以整除N。则这个算法的时间复杂度是:(B)
A.O(N/2)
B.O(√N)
C.O(√NlogN)
D.O(0.5logN)
2-7
下列函数中,哪个函数具有最慢的增长速度:(B)
A.N^1.5
B.NlogN^2
C.N^2*logN
D.N(logN)^2
[解析]不知道…
2-8
给定N×N×N的三维数组A,则在不改变数组的前提下,
查找最小元素的时间复杂度是:(D)
A.O(N^2)
B.O(NlogN)
C.O(N^3*logN)
D.O(N^3)
[解析]至少要遍历一遍数组,所以是O(N^3)
2-9
计算机算法指的是()。©
A.计算方法
B.排序方法
C.解决问题的有限运算序列
D.调度方法
2-10
计算机算法必须具备输入、输出和()等五个特性。(B)
A.可行性、可移植性和可扩充性
B.可行性、确定性和有穷性
C.确定性、有穷性和稳定性
D.易读性、稳定性和安全性
[解析]必须能结束并得到输出–有穷性
可行性–能写出来
确定性–不知道