1、以下算法的时间复杂度为( D)。
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)
解析:基本运算是i=i*2,设其执行时间为T(n),则2T(n)<=n,即T(n)<=log2n=O(log2n)
2、分析以下程序段的时间复杂度是 O(n^2) 。
for(i=O;i<n;i++)
for(j=O;j<n;j++)
A[i][i]=O;
解析:该程序段i层循环了n次,j层循环了n次,所以该时间复杂度为O(n^2)。
3、分析以下函数的时间复杂度( D )。
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)
解析: 此函数有一个循环,但是循环没有被执行n次,i每次都是2倍进行递增,所以循环只会被执行log2(n)次。
4、计算下面的时间复杂度
for (int i = 0; i < n; i++) {// 执行n + 1 次
System.out.println("Hello world"); // 执行n次
}
解析:时间复杂度为:T(n) = 2n+1,根据上面的规则,最后:T(n) = O(n)
5、for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
a[i][j] = 0;
解:语句 a[i][j] = 0; 可推出执行次数为 m * n 次。所以时间复杂度为 O(m*n)。