Skip to content

2014年 408 数据结构 第 1 题

数据结构2014年选择题2分

题目

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

C
count = 0;
for (k = 1; k <= n; k *= 2)
    for (j = 1; j <= n; j++)
        count++;

错因

A

只看了外层 for (k = 1; k <= n; k *= 2) —— k 翻倍递增,循环 次,于是答 。但里面还嵌着一层完整的 次循环,单看外层等于完全忽略了嵌套乘法。

B

只看了内层 for (j = 1; j <= n; j++) —— 次,于是答 。漏了内层会被外层"乘上" 次这一事实。嵌套循环复杂度是内外层次数相乘,不是只取其一。

D

把外层也当成了 次(误读 k *= 2k++),于是 关键差别k *= 2 让 k 走 1, 2, 4, 8, …, n 这条指数增长路径,达到 n 只需 步;而 k++ 才是线性 步。

总解析

两层循环各算各,再相乘。

外层 for (k = 1; k <= n; k *= 2)

k 取值序列是 ,最大 ,所以

外层执行次数

内层 for (j = 1; j <= n; j++)

每次执行恰好 次,与外层 k 无关。

总操作数

类似题型对比

  • for (k=1; k<=n; k++) for (j=1; j<=n; j++)(双线性)
  • for (k=1; k<=n; k*=2) for (j=1; j<=n; j++)(外指数 + 内线性,本题)
  • for (k=1; k<=n; k*=2) for (j=1; j<=k; j++)(内层和是几何级数
    注意:内层上界变成 k 时,结果会差一个量级。

最终答案是 C(O(nlog₂n))

最后更新:

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

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