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

为何这段代码的时间复杂度是O(√n)?求数学推导方法

代码时间复杂度O(√n)的数学推导

先把你给出的代码整理成代码块:

i:=1
p:=0
for (p < n) do 
   p = p+i
   i+=1

要推导它的时间复杂度,核心是计算循环执行的次数k:

  1. 分析每次循环的p值变化
    每次循环里,p会累加当前的i,然后i自增1。循环执行k次后,p的值是从1到k的等差数列求和:
    p = 1 + 2 + 3 + ... + k
    根据等差数列求和公式,这个和等于 k*(k+1)/2。

  2. 确定循环停止的条件
    循环在p ≥ n时退出,也就是当k*(k+1)/2 ≥ n时,循环不再执行。我们需要找到满足这个不等式的最小k值。

  3. 推导k和n的量级关系
    因为k是正整数,k和k+1的数值非常接近,我们可以近似把k*(k+1)看成k²,那么不等式可以简化为:
    k²/2 ≥ n
    变形后得到:
    k² ≥ 2n → k ≥ √(2n)

从这个结果能看出,k的增长速度和√n是一个量级的,所以这段代码的时间复杂度是O(√n)。

为什么不是O(n)?因为每次循环p的增量是越来越大的(从1开始每次加1),不是固定累加某个常数,所以循环次数不会跟着n线性增长,而是跟着n的平方根增长。比如n=100时,循环只需要执行14次就会停止,远小于100次,这也能验证推导的结论。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:10:01