1. 以下算法的时间复杂度为( )。
void fun(int n){
int i=l;
while(i<=n)
i=i*2;
}
A. O(n)
B. O(n2)
C. O(nlog2n)
D. O(log2n)
选D 因为基本运算是i=i*2,可以设执行时间为T(n),则2T(n)<=n,即T(n)<=log2n=O(log2n)
2. 某算法的时间复杂度为O(n2),表明该算法的( )。
A.问题规模是n2
B.执行时间等于n2
C.执行时间与n2成正比
D.问题规模与n2成正比
选C 时间复杂度为O(n2),说明算法的执行时间T(n)<=c * n2(c为常数),即T(n)=O(n2)。
3. for(i=n-l;i>l;i--)
for(j=1;j<i;j++)
if(A[j]>A[j+l])
A[j]与 A[j+1]对换;
其中n为正整数,则最后一行的语句频度在最坏情况下是( )。
A. O(n)
B. O(nlogn)
C. O(n3)
D. O(n2)
选D 当所有相邻元素都为逆序时,则最后一行的语句每次都会执行。此时,所以在最坏情况下的该语句频度是O(n2)。
4. 分析以下程序的时间复杂度()
void fun(int n)
{
int i = l;
while (i <= n)
i = i * 2;
}
A.O(n)
B.O(n ^ 2)
C.O(nlogn)
D.O(logn)
选D 此函数有一个循环,但是循环没有被执行n次,i每次都是2倍进行递增,所以循环只会被执行log2(n)次
5. 分析以下程序的时间复杂度()
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
a[i][j] = i * j;
A.O(n)
B.O(n^2)
C.O(nlogn)
D.O(logn)
选B 程序有两次循环,每个循环都有n次操作,所以时间复杂度为n^2