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

求助:含i条件的嵌套循环总指令执行次数计算(Big O问题)

嵌套循环指令计数(含外层变量依赖)

先明确指令计数的基本规则:每个循环的初始化、条件判断、增量操作,以及循环体的指令都要单独计数。

回顾固定内层条件的情况(你的第一个例子)

对应你给出的公式,拆解指令逻辑:

for (int i = 0; i < n; i++)
{
    for (int j = 0; j < n*n; j++)
        cout << "hello";
}
  • 外层循环指令:
    • int i=0:初始化1次
    • i <n:条件判断n+1次(最后一次判断不成立退出)
    • i++:增量操作n次
  • 内层循环(每轮外层循环都执行一次):
    • int j=0:初始化1次/轮
    • j <n*n:条件判断n²+1次/轮
    • j++:增量操作n²次/轮
    • cout:循环体指令n²次/轮
  • 总指令就是外层指令 + n倍的内层单轮指令,也就是你给出的公式:
    solution= 1 +n+1 +n +n(1+n*2+1 +n*2+ n*n)(这里的n*2是对n²判断和增量次数的简化写法)

内层条件依赖外层变量i的情况(你的第二个例子)

核心是:内层循环的执行次数随外层循环的i变化,需要用求和来累计每一轮外层循环对应的内层指令数。

目标代码:

for (int i = 0; i < n; i++)
{
    for (int j = 0; j < i; j++)
        cout << "hello";
}

步骤1:计算外层循环的固定指令

和第一个例子完全一致:

  • 初始化int i=0:1次
  • 条件判断i <n:n+1次
  • 增量i++:n次
  • 外层总指令:1 + (n+1) +n = 2n+2

步骤2:计算内层循环的总指令(按i的取值求和)

外层循环的i从0到n-1,每一轮i=k时,内层循环的指令数不同:
当i=k时:

  • 内层初始化int j=0:1次
  • 条件判断j <k:k+1次(j从0到k,共k+1次判断,最后一次不成立退出)
  • 增量j++:k次(每执行一次循环体就执行一次增量)
  • 循环体cout:k次(j从0到k-1,共k次)
  • 单轮内层指令数:1 + (k+1) +k +k = 2 +3k

把k从0到n-1的所有单轮内层指令求和:

总内层指令 = Σ(k=0到n-1)(2+3k)

拆分求和项:

  • Σ2(共n项)= 2n
  • Σ3k =3Σk,其中Σk(k=0到n-1)= n(n-1)/2
  • 所以总内层指令= 2n + 3*[n(n-1)/2] = (4n +3n²-3n)/2 = (3n² +n)/2

步骤3:总指令数

把外层和内层指令相加:

总指令 = (2n+2) + (3n² +n)/2 = (4n+4 +3n² +n)/2 = (3n² +5n +4)/2

简化理解(Big O视角)

如果只看时间复杂度,内层循环的总执行次数是Σk(k=0到n-1)=n(n-1)/2,属于O(n²)级别,和固定内层条件为n的情况同阶,但实际指令数更少。

内容的提问来源于stack exchange,提问作者M.Jafar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:08:37