给出以下代码片段:
a.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=f56e8ee17aa966e641c8b4e1ba3105abc077a143, not stripped
gcc (Ubuntu/Linaro 4.8.2-19ubuntu1) 4.8.2
Linux tegra-ubuntu 3.10.24-g6a2d13a #1 SMP PREEMPT Fri Apr 18 15:56:45 PDT 2014 armv7l armv7l armv7l GNU/Linux
我的假设:
因此,总运行时间应为O(N ^ 5),对吧?
答案 0 :(得分:2)
初步评论
sum(k=1,p,k^2) = p(p+1)(2p+1)/6 = O(p^3)
sum(k=1,p,k^6) = O(p^7)
计算复杂性
k=1
运行到j^2
,因此它可以完成j^2
次操作。j=1
到i^2
,每一步我们都进行j^2
次操作。根据我的初步观察,通过在第一个等式中替换p=i^2
,我们可以为i^2(i^2+1)(2*i^2+1)/6
的每个值计算总操作:i
。这是O((i^2)^3) = O(i^6)
次操作。i=1
运行到n
,并在每一步执行O(i^6)
次操作。所以我们有O(n^7)
次操作。<强>参考强>
答案 1 :(得分:1)
让我们打开每个循环运行的次数。
First loop 1, 2, 3, 4, 5, ...., N
Second loop 1, 4, 9, 16, 25, ...., (N*N) // N^2
Third loop 1, 16, 81, 256, 625, ...., ( (N*N)*(N*N) ) // N^4
所以,我认为复杂性应该是N ^ 4
编辑1
基于评论,我认为复杂性将是系列的总和
1, 16, 81, 256, 625, ...., ( (N*N)*(N*N) )
编辑2
我认为我们在打开循环时犯了一个错误(感谢CodeYogi)。让我们再试一次。
First loop 1, 2, 3, 4, 5, ...., N
Second loop 1, 4(1,2,3, 4), 9 (1,2,....9), 16, 25, ...., (N*N)
Third loop 1, 30(1+4+9+16), 285(1+4+...81), and so on..........