迭代算法的时间复杂度?

时间:2015-02-21 16:44:31

标签: 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;

2 个答案:

答案 0 :(得分: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 = 1的分配 log(n) k的双倍Θ(n)

因此算法的时间复杂度为{{1}}。

答案 1 :(得分:0)

// code                 | max times executed
k=1;                    | 1
while (k<=n) do         | log n
    j=1;                | log n
    while (j<=k) do     | log n * n
        sum=sum+1;      | log n * n
        j=j+1;          | log n * n
    k=k*2;              | log n

所以O复杂度似乎是n log n。