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

求迭代器按自身对数增量增长的代码片段的大O时间复杂度

循环时间复杂度分析:i = i + log(i)

先看给定的代码片段:

i = 10
while(i < n) {
    i = i + log(i);
}

要分析这个循环的大O时间复杂度,核心是计算迭代次数:找到最小的k,使得经过k次迭代后i ≥ n。

分析过程

初始值i₀=10,每次迭代后i的更新规则是i_{m+1} = i_m + log(i_m)。当n足够大时,离散的迭代可以近似为连续函数的变化:把i看作迭代次数k的函数i(k),则其瞬时变化率di/dk ≈ log(i)(每次增量log(i)对应连续情况下的变化率)。

分离变量后得到:
dk = di / log(i)

对这个式子从初始值10到n积分,总迭代次数k的近似值为:
k ≈ ∫₁₀ⁿ 1/log(x) dx

这个积分是对数积分函数li(n)减去li(10),当n趋向于无穷大时,对数积分的渐近主导项是n/log(n)(低阶项和常数项在大O分析中可忽略)。

换个直观角度:循环结束时i的总增量约为n(初始值10相对于n可忽略),每次迭代的增量log(i)随i增大逐渐趋近于log(n),平均增量的量级是log(n),因此迭代次数的量级就是总增量除以平均增量,即n/log(n)。

结论

这个循环的时间复杂度是O(n / log n)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:45:39