时间复杂度选题

题型一

1.设n是描述问题规模的正整数,则下列程序片段的时间复杂度是()

i=n*n;
while(i!=1)
	i=i/2;

A. O( l o g 2 n log_2n log2n)
B. O(n)
C. O( n \sqrt{n} n )
D. O( n 2 n^2 n2)

【解析】
答案:A
《时间复杂度选题》
2. 下面算法的时间复杂度是()

void fun(int n)
{ 
	int i=0,s=0;
	while(s<n)
	{ 
		++i;
		s=s+i;
	}
}

A. O(n)
B. O( n 2 n^2 n2)
C. O( n \sqrt{n} n )
D. O( n l o g 2 n nlog_2n nlog2n)

【解析】
答案:C

设循环执行 k 后 s == n,相当于 s = 1+2+3+…+k = n, (k*(k+1))/2 = n, 忽略系数和低次项,所以 k = n^(1/2)

题型二 阶乘

求整数n(n>=0)阶乘的算法如下,其时间复杂度是()

int fact(int n)
{ 
	if(n<=1) return 1;
	return n*fact(n-1);
}

A. O( l o g 2 n log_2n log2n)
B. O(n)
C. O( n l o g 2 n nlog_2n nlog2n)
D. O( n 2 n^2 n2)

【解析】
答案:B
记住阶乘的复杂度都是O(n),即可。
n!=n*(n-1)*(n-2) … … *1,在每一轮我们都只执行了一次递归调用,不要误以为是每一轮的 n 相乘。

    原文作者:real_metrix
    原文地址: https://blog.csdn.net/qq_34902437/article/details/103278737
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞