【发布时间】:2015-05-02 20:51:25
【问题描述】:
我试图解决以下练习:
以下代码片段的最坏情况运行时间增长顺序是多少 作为 N 的函数?
int sum = 0;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= i*i; j++)
for (int k = 1; k <= j*j; k++)
sum++;
我发现复杂度是 O(n4),但是正确答案是:
答案是:N7
对于给定的 i 值,执行最内层循环的主体 12 + 22 + 32 + .. . + (i2)2 ~ 1/3 i6 次。对 i 的所有值求和产生 ~ 1/21 N7。
我需要一些帮助来理解这个答案以及在这种情况下计算复杂性的正确方法。
编辑:特别是,我不明白这个说法:
12 + 22 + 32 + ... + (i2)2 ~ 1/3 i6
因为对我来说,2 + 22 + 32 + ... + (i2 )2 ~ i4
【问题讨论】:
-
这是一篇针对特定问题的非常笼统的文章。
-
我添加了更多信息来解决您的编辑问题。
-
@otus 好像你有一本很好的学生书,可以分享一下名字吗?
-
@rahpuser 实际上这是来自 coursera 上的“算法,第 1 部分”课程(由 robert sedgewick,普林斯顿),该课程基于 robert sedgewick 的“算法第 4 版”一书
标签: algorithm time-complexity complexity-theory