#include <stdio.h>
int main() {
int N = 32; /* for example */
int sum = 0;
for (int i = 1; i <= N*N; i = i*3)
for (int j = 1; j <= i; j++)
sum++;
printf("Sum = %d\n", sum);
return 0;
}
外环是奇数。
如果检查只有N(不是N * N)那么我每次增加3会意味着外部循环需要N / 3次N次迭代?
但是检查是N * N或N ^ 2所以暗示将增长
N^2 / 3 ??? (n squared divided by 3) Is that correct?
如果我玩N的不同值,比如每次加倍,i循环(单独)不会增长太多。像对数增长一样)。我将如何以数学方式表达这一点?
那么你如何看待内环?如果它每次增加到i,我怎样才能以数学方式表达?如何将内循环与N?
联系起来我想a)能够用N来表示数学上的“复杂性”。然后下一步,b)是使用big-O表示法。
对此感到困惑。任何帮助将不胜感激。
答案 0 :(得分:1)
我认为外部循环执行log3(N*N)
次,因为每次乘以3得到1,3,9 ......并且N * N执行的对数基数3达到N * ñ
内部循环最多执行N * N次,因此一切都变为log3(N*N)*N*N
。
答案 1 :(得分:0)
增量指令(近似)执行N * N + N * N / 3 + N * N / 9 + ... = N * N(1 + 1/3 + 1/9 + ...)= N * N * 3/2倍(使用几何系列的公式)。所以整个代码的运行时间是O(N * N)(假设所有算术都是O(1)而C ints可以代表任意大的数字)。
答案 2 :(得分:0)
fede1024是正确的,外部循环是log3(n ^ 2)。
内环稍微复杂一点,但求解1 + 8 + 27的总和..(求和^ ^ 3)为您提供解决方案。您可以使用一组线性方程计算立方体的总和,假设该和等于3次多项式并表示为a ^ ^ + + ^ 2 + cy。或谷歌它发现立方体的总和等于(n(n + 1)/ 2)^ 2(如果你想要,可以包括一个完整的解决方案)。
然后整个复杂度将是log3(n ^ 2)*(n(n + 1)/ 2)^ 2。大O表示法,log3(n ^ 2)* n ^ 3。可能是错的。