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

算法分析:三类嵌套循环代码片段的时间方程构建疑问

嵌套循环时间复杂度分析方法

你已经确认了外层循环的轮次都是log₂n量级、sum++是常数时间操作,所以只需要统计sum++的总执行次数,就能得到对应的时间复杂度,核心入手方法就是枚举外层循环每一轮的内层执行次数,累加求和即可,三个代码的差异完全来自内层循环边界和外层变量的关联关系:


第一段代码

int sum = 0;
for (int k = n; k > 0; k /= 2)
   for (int i = 0; i < k; i++)  
       sum++;
  • 外层循环的k取值序列为:n、n/2、n/4、……、1,总共有⌈log₂n⌉轮
  • 每一轮内层循环的执行次数等于当前轮次的k值,总执行次数就是所有k值的和:n + n/2 + n/4 + … + 1,对等比数列求和即可得到结果。

第二段代码

int sum = 0;
for (int i = 1; i < n; i *=2)
   for (int j = 0; j < i; j++) 
       sum++;
  • 外层循环的i取值序列为:1、2、4、……、小于n的最大2的幂,总轮次也是⌈log₂n⌉
  • 每一轮内层循环的执行次数等于当前轮次的i值,总执行次数就是所有i值的和:1 + 2 + 4 + … + 2^m(其中2^m < n ≤ 2^{m+1}),对等比数列求和即可得到结果。

第三段代码

int sum = 0;
for (int i = 1; i < n; i *=2)
   for (int j = 0; j < n; j++) 
       sum++;
  • 外层循环轮次还是⌈log₂n⌉
  • 内层循环的边界是固定值n,和外层的i没有关联,所以每一轮内层都固定执行n次,总执行次数直接是外层轮次乘以n即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:06:00