题目
.设 n 是描述问题规模的非负整数,下面程序片段的时间复杂 度是( )。x = 2:while ( x<n/2 )x= 2X x;A. O( log 2n) B. O( n) C. O( nlog 2n) D. O( n2)
.设 n 是描述问题规模的非负整数,下面程序片段的时间复杂 度是( )。
x = 2:
while ( x<n/2 )
x= 2X x;
A. O( log 2n)B. O( n)
C. O( nlog 2n)
D. O( n2)
题目解答
答案
[答案] A [解析] 其中,以基本的原操作重复执行的次数作为算法的时间 度量。题目中的基本运算是语句 x = 2X x,设其执行时间为T (n),
解析
考查要点:本题主要考查对循环时间复杂度的分析能力,需要理解循环变量的增长规律,并将其转化为数学表达式进行分析。
解题核心思路:
循环中变量x每次乘以2,呈现指数增长。需确定循环执行次数,即找到满足x < n/2的最大次数。通过分析x的取值规律,转化为对数运算,最终得出时间复杂度。
破题关键点:
- 变量增长规律:
x初始为2,每次循环后变为2x,即x = 2^k(k为循环次数)。 - 循环终止条件:当
2^k < n/2不成立时循环终止。 - 数学转化:通过不等式
2^k < n/2取对数,得到循环次数与log n的关系。
循环变量分析:
- 初始
x = 2,每次循环x翻倍,即x = 2, 4, 8, 16, ... - 循环条件为
x < n/2,需找到满足条件的最大循环次数k。
数学推导:
- 循环条件可表示为:
$2^{k+1} < \frac{n}{2}$
(因为初始x=2=2^1,第k次循环后x=2^{k+1}) - 取以2为底的对数:
$k+1 < \log_2 \left( \frac{n}{2} \right) = \log_2 n - 1$ - 解得最大整数
k:
$k < \log_2 n - 2$
因此,循环次数为O(log n)。
时间复杂度:
循环体内的操作为常数时间,总时间复杂度为循环次数,即O(log n),对应选项A。