For loop 如何使用求和计算对数复杂度?

For loop 如何使用求和计算对数复杂度?,for-loop,big-o,computer-science,For Loop,Big O,Computer Science,我的问题 这个代码段的Big-O复杂性是多少? 把n看成是4的幂。< /P> for(int i = 1; i <= n; i = i*4) for(int k = 1; k <= i; k++) // constant statement 用于(int i=1;i您在这里的轨道是正确的,但是您的最里面的求和是错误的。您是对的,外部循环将迭代log_4 n次,但是您设置了外部求和,以

我的问题

这个代码段的Big-O复杂性是多少? 把n看成是4的幂。< /P>
for(int i = 1; i <= n; i = i*4)                      
    for(int k = 1; k <= i; k++)                 
       // constant statement

用于(int i=1;i您在这里的轨道是正确的,但是您的最里面的求和是错误的。您是对的,外部循环将迭代log_4 n次,但是您设置了外部求和,以便我将其计数为1,2,3,…,log_4 n,而不是4^0,4^1,4^2,…,4^log_4 n。因此,内部求和的上限是错误的。上限是应该是4^i,而不是i

如果你这样设置,你会发现总的总和是

4^0+4^1+4^2+…+4^log\u 4 n

=(4^(log_4 n+1)-1)/(4-1)(使用几何级数和的公式)

=(4(4^logn)-1)/3

=(4n-1)/3

=Θ(n)


您可以使用wolframalpha获得极其精确的结果