迭代算法的时间复杂度?

Erg*_* RM 0 algorithm time time-complexity

这是算法:我认为它的时间复杂度是O(nlogn),但我不确定

k=1;
while (k<=n) do      
    j=1;
    while (j<=k) do        
        sum=sum+1;
        j=j+1;
    k=k*2;
Run Code Online (Sandbox Code Playgroud)

Jun*_*sor 5

第一次内循环在第二次迭代时执行1次迭代.序列类似于1,2,4,8,16,32 ......只要它小于或等于n.序列可能有?(log(n))元素但其总和是?(n).这是因为

1 + 2 + 4 + ... + 2 ^ k = 2*2 ^ k - 1

我们知道n/2 < 2^k <= n.因此内循环执行?(n)次数,每个内循环执行需要恒定数量的指令.

其余的代码只是log(n)赋值j = 1log(n)双精度k.

所以算法的时间复杂度是?(n).

  • @JonathanLeffler O(NlogN)上限当然也适用于该论证,但关于几何级数之和的事实(N + N/2 + N/4 + N/8 + ... <2N在这种情况下)允许建立更好的估计. (3认同)