算法复杂度?

dream17953 2010-08-07 02:58:23



for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
for(k=1;k<=j;k++)
{
s=i+k;printf("%d",s);
}


这个算法的复杂度是n的5次方吗?如果不对,麻烦解释下。谢谢。
...全文
239 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
ronilee 2010-08-08
  • 打赏
  • 举报
回复
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
{
s=i+k;printf("%d",s);
}

反正这个是O(n^3)。大家看着办。
dream17953 2010-08-08
  • 打赏
  • 举报
回复
结贴了怎么还能回复?
zhangzhongke007 2010-08-07
  • 打赏
  • 举报
回复
公说公有理婆说婆有理。
还是要个权威还定局。
shan280 2010-08-07
  • 打赏
  • 举报
回复
貌似不是n的3此方
dream17953 2010-08-07
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 six_dimensional 的回复:]
1+1+2+1+2+3+1+2+3+4+.....+1+2+3+4+....n
[/Quote]


正确啊,这算是当初学数列的时候的知识了。非常感谢各位的积极参与。
吴凡凡 2010-08-07
  • 打赏
  • 举报
回复
想多学习
Six_dimensional 2010-08-07
  • 打赏
  • 举报
回复
1+1+2+1+2+3+1+2+3+4+.....+1+2+3+4+....n
qinken547 2010-08-07
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 alandingking 的回复:]

引用 4 楼 qinken547 的回复:

我觉得应该是6次
第一个for是n次
第二个for是1+2+...+n=n(n+1)/2也就是n^2次
第二个for是1+1+2+1+2+3+...+1+2+3+..+n=n(n+1)(2n+1)/12+n(n+1)/4也就是3次
所以最后是1*2*3=6次.....

我勒个去,大哥,这样也行啊...强烈怀疑你的算法课过了没?
[/Quote]
嗯,是我错了,最后结果就是我所说的第三个的
n(n+1)(2n+1)/12+n(n+1)/4
所以是o(n^3)
alandingking 2010-08-07
  • 打赏
  • 举报
回复
刚才用程序跑了下 s=i+k;printf("%d",s); 这个换成计数count++
n count
10 220
100 171920
1000 167338920

这个也最多也就n^3
AAA20090987 2010-08-07
  • 打赏
  • 举报
回复
显然是O(n^3)嘛,
确切一点就是O(1/4n^3)
alandingking 2010-08-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qinken547 的回复:]

我觉得应该是6次
第一个for是n次
第二个for是1+2+...+n=n(n+1)/2也就是n^2次
第二个for是1+1+2+1+2+3+...+1+2+3+..+n=n(n+1)(2n+1)/12+n(n+1)/4也就是3次
所以最后是1*2*3=6次.....
[/Quote]
我勒个去,大哥,这样也行啊...强烈怀疑你的算法课过了没?
dream17953 2010-08-07
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 sky_pearl 的回复:]
or(i=1;i<=n;i++)//再N次
for(j=1;j<=i;j++)//又N次
for(k=1;k<=j;k++)//每条执行N次
{
s=i+k;printf("%d",s);
}
常数是不算在复杂度里的 所以是N的三次方
[/Quote]


但我感觉执行次数应该在N^2和N^3之间。写一个程序测试一下就可以证明。
qazwhl845174869 2010-08-07
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 swl82560397pq 的回复:]
引用 15 楼 qinken547 的回复:
n=1时,三个for都是1
n=2,第一个for是2,第二个1+2,第三个for1+(1+2)
n=3,第一个for是3,第二个1+2+3,第三个是1+(1+2)+(1+2+3)
....

我又感觉不对了
lz的复杂度小于for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)……
[/Quote]
正解啊
sky_pearl 2010-08-07
  • 打赏
  • 举报
回复
or(i=1;i<=n;i++)//再N次
for(j=1;j<=i;j++)//又N次
for(k=1;k<=j;k++)//每条执行N次
{
s=i+k;printf("%d",s);
}
常数是不算在复杂度里的 所以是N的三次方
michael122 2010-08-07
  • 打赏
  • 举报
回复
显然3次嘛
三重求和,算出来就是n的三次多项式
swl82560397pq 2010-08-07
  • 打赏
  • 举报
回复
i^3的和 i =1 ,,,,n
wing_0706 2010-08-07
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 lightboat09 的回复:]

C/C++ code

for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
for(k=1;k<=j;k++)
{
s=i+k;printf("%d",s);
}

肯定不比下面的复杂度大,而下面的是o(n^3)

for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
{
……
[/Quote]

有道理啊。 不应该比他大的。。 应该怎么算啊。。
swl82560397pq 2010-08-07
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 qinken547 的回复:]
n=1时,三个for都是1
n=2,第一个for是2,第二个1+2,第三个for1+(1+2)
n=3,第一个for是3,第二个1+2+3,第三个是1+(1+2)+(1+2+3)
....
[/Quote]
我又感觉不对了
lz的复杂度小于for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
而这个复杂度是n^3
所以lz的复杂度是小于n^3的
qinken547 2010-08-07
  • 打赏
  • 举报
回复
n=1时,三个for都是1
n=2,第一个for是2,第二个1+2,第三个for1+(1+2)
n=3,第一个for是3,第二个1+2+3,第三个是1+(1+2)+(1+2+3)
....
小楫轻舟 2010-08-07
  • 打赏
  • 举报
回复

for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
for(k=1;k<=j;k++)
{
s=i+k;printf("%d",s);
}

肯定不比下面的复杂度大,而下面的是o(n^3)

for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
{
s=i+k;printf("%d",s);
}
加载更多回复(13)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧