Skip to content

2022年 408 数据结构 第 1 题

数据结构2022年选择题2分

题目

下列程序段的时间复杂度是( )。

C
int sum = 0;
for (int i = 1; i < n; i *= 2)
    for (int j = 0; j < i; j++)
        sum++;

错因

A

只数了外层循环的次数。外层 i 按 1, 2, 4, …, 倍增,确实只跑约 轮,但忽略了内层 j 在每一轮里要跑 i——内层不是常数操作。把外层的迭代次数当成总操作数,就会得到

C

把"双层循环 = 外层次数 × 内层次数"机械套用了。看到外层是 、内层最大跑到 ,就直接相乘得 。这种估法忽略了内层 i 的值随外层每次翻倍,绝大多数轮次内层只跑很少次(1, 2, 4, …),不能用最后一轮的次数代表所有轮次。

D

把所有双重循环都默认成 ,没看清外层是 i *= 2 而不是 i++。如果外层是线性的、内层也是线性的才会到 ;这里外层是对数级的,整体远小于

总解析

思路:双重循环的总操作数 = 内层执行次数对外层各轮求和。

外层变量 i 取值依次是 (其中 ,约 轮)。每一轮内层执行 i 次。

总执行次数:

这是一个等比数列求和,公比为 2,最后一项的值大约就是 ,整个和也是 量级——而不是

最终答案是 B(

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数