You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助计算一段C语言代码的时间复杂度

分析这段C语言代码的时间复杂度

先看你给出的代码:

int funn(int n) {
    int i, j, k = 0;
    for (i = n / 2; i <= n; i++)
        for (j = 2; j <= n; j = j * 2)
            k = k + n / 2;
    return k;
}

我们可以分两层循环拆解分析:

1. 外层循环的执行次数

外层循环起始值为n/2,终止条件是i <= n,每次i++。执行次数计算为:
n - n/2 + 1 = n/2 + 1
当n足够大时,常数项1和系数1/2可以忽略,因此外层循环的时间复杂度为O(n)。

2. 内层循环的执行次数

内层循环起始值为2,每次j = j * 2,直到j > n停止。这是典型的指数增长循环,推导次数如下:
假设执行k次,第k次循环后j的值为2^k,终止条件是2^k > n,即k > log₂n。因此内层循环的执行次数为log₂n,时间复杂度为O(log n)。

3. 总时间复杂度

嵌套循环的总执行次数是外层次数乘以内层次数,即(n/2 + 1) * log₂n。忽略常数项和系数后,总时间复杂度为O(n log n)。

你之前误以为是O(n),应该是没注意到内层循环不是固定次数——它的执行次数和n的对数相关,不是常数。

给新手的几个分析小技巧:

  • 嵌套循环的时间复杂度通常是各层循环复杂度的乘积(除非内层循环的终止条件和外层变量相关,这里内层只和n有关,所以直接相乘)
  • 遇到每次乘/除固定数的循环,优先考虑对数级复杂度O(log n)
  • 大O表示法只关注量级,可直接忽略常数、低阶项,比如n/2直接看成n,log₂n和log₁₀n在大O里等价,统一写成log n

内容的提问来源于stack exchange,提问作者sLang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:21:53