x=1;
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
for(k=1;k<=j;k++)
x++;
为什么
循环了(1^2+2^2+3^2+...+n^2)=n(n+1)(2n+1)/6≈(n^3)/3次
这个1^2+2^2+3^2是怎么得出来的
下面这个3层循环的时间复杂度为什么是O(n^3)
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- cao_yanjie 2017-08-27 09:32关注
首先,我们考虑这么一种情况,当i取值为N的时候,那么我们上面那个三层循环就变成了
for(j=1;j<=N;j++)
for(k=1;k<=j;k++)
x++;
这样看来,是不是一目了然了。
N的取值为 1 2 3 4 5 ...... N-1 N
相应的,我们可以把上面那个二层for循环改写为一层循环
for(k=1;k<=[1 2 3 4 5 ......N-1 N];k++)
x++;
那么,我们这个for循环运行的总的时间复杂度就是 (1+n)n/2
当然,这不是最终的时间复杂度,因为我们只是讨论了i取a的情况
所以,总的时间复杂度为 Σ(对i求和 i从1到n)i+i^2/2一次循环: 运行为N次;
二次循环:运行为N-1+N-2+N-3+...+1=1+2+3+...+N-1=N(N-1)/2
三次循环:N(N+1)/2+(N-1)*N/2+...+2*3/2+1*2/2=N(N+1)(N+2)/6补充数学公式
1*2/2+2*3/2+3*4/2+……+n(n+1)/2=n(n+1)(n+2)/6
1^2+2^2+3^2+……+n^2=n(n+1)(2n+1)/6
1^3+2^3+3^3+……+n^3=[n(n+1)/2]^2
等比数列求和公式
Sn=a1(q^n-1)/(q-1) (q不等于1)
等差数列求和公式
Sn=na1+n(n-1)d/2本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 5无用
悬赏问题
- ¥15 做个有关计算的小程序
- ¥15 MPI读取tif文件无法正常给各进程分配路径
- ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
- ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
- ¥15 setInterval 页面闪烁,怎么解决
- ¥15 如何让企业微信机器人实现消息汇总整合
- ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
- ¥15 如何用Python爬取各高校教师公开的教育和工作经历
- ¥15 TLE9879QXA40 电机驱动
- ¥20 对于工程问题的非线性数学模型进行线性化