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

几何级数序列时间复杂度解析:代码O(N)复杂度的疑惑

代码时间复杂度O(N)的推导解释

先看你给出的代码:

int sum = 0;
for (int i=1; i<n; i=i*3) {
    for (int j=1; j<=i; j++) {
        sum++;
    }
}

你的误区在于错误地将外层循环次数和内层循环的“单次复杂度”相乘,实际上我们需要计算所有内层循环的总执行次数,而非简单乘法。

步骤1:分析外层循环的i取值

外层循环中,i的取值依次是1, 3, 9, 27, ..., 3^k,直到3^k < n停止。这里k的取值满足3^k < n ≤ 3^(k+1),k的数量级是O(log₃n),也就是O(logn)(对数的底数不影响时间复杂度的大O表示)。

步骤2:计算内层循环的总执行次数

每次外层循环对应的内层循环会执行i次,总执行次数是这些i值的和:

S = 1 + 3 + 9 + ... + 3^k

这是首项为1、公比为3的等比数列,求和公式为:

S = (3^(k+1) - 1) / (3 - 1) = (3^(k+1) - 1)/2

步骤3:推导总次数的数量级

因为3^k < n,所以3^(k+1) = 3*3^k < 3n,代入求和公式可得:

S < (3n - 1)/2 < 3n/2

这意味着总执行次数的上限是线性的,也就是O(n),所以这段代码的时间复杂度是O(N)。

内容的提问来源于stack exchange,提问作者Student-san

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:49:54