【个人理解】计算for三层嵌套循环的时间复杂度

m=0

for(i=1;i<=N;i++)

    for(j=1;j<=i;j++)

        for(k=1;k<=j;k++)

            m++;

求时间复杂度

 

时间复杂度等于m的被执行的次数:

i=1时,m被执行一次:

i=2时,m被执行1+3=4次:

 

i=3时, m被执行1+3+6=10次 :

可以观察到,第i次循环次数是一个有规律的数列: 1, 3, 6, 10,... ... 

设数列a_n,其中  a_1=1,\;a_2=3,\;a_3=6,

那么观察可得,

\\a_1=1\\a_2=3=1+2=a_1+2\\a_3=6=1+2+3=a_2+3\\...,

\\a_n=a_{n-1}+n\\=a_{n-2}+(n-1)+n\\=a_{n-2}+(n-1)+n\\=...\\=a_1+2+3+...+(n-1)+n\\=1+2+3+...+(n-1)+n\\=\frac{n(n+1)}{2};

也就得到了第i次循环的通项公式a_n=\frac{n(n+1)}{2}.

i=n时,m++执行 \frac{n(n+1)}{2}次:(图片中sum公式有误,具体请看下方推导)

知道了第n次循环m的执行次数,再全部加起来就能知道总的次数,也就是求数列a_n的前n项和:

又因为a_{n-1}=\frac{(n-1)(n-1+1)}{2}=\frac{n^2}{2}-\frac{n}{2};

所以数列an前n-1项和

\\S_{n-1}=\frac{1}{2}(1^2+2^2+3^2+...+n^2)-\frac{1}{2}(1+2+3+...+n) \\=\frac{1}{2}\frac{n(n+1)(2n+1)}{6}-\frac{(n+1)}{2} \\=\frac{n(n^2-1)}{6} \\=\frac{n^3-n}{6}.

把(n-1)换成n,也就是数列a_n前n项和S_{n}=\frac{(n+1)^3-(n+1)}{6};

即m++的执行次数也是S_{n}=\frac{(n+1)^3-(n+1)}{6}.

代入数据,验证正确.

最后,可以看出n的最高次幂为n^3,因此三重循环的时间复杂度是O(n^3).

 

 

 

 

  • 97
    点赞
  • 230
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值