这个算法是二次还是线性的?

时间:2016-09-13 15:40:55

标签: algorithm

我有以下算法:

s=0
for j=1 to n
    k=n
    while k>0
        s++
        k=(int)k/2
    endwhile
endfor

我所分析的时间:

j=1 the while loop executes 1 time
j=2 the while loop executes 2 times
j=3 ...                     2 times
j=4 ...                     3 times
j=5 ...                     3 times
j=6 ...                     3 times
j=7 ...                     3 times
j=8 ...                     4 times

所以我将得到外部循环的(n / 2)* n的总和,那么这将是O(n ^ 2)吗?

1 个答案:

答案 0 :(得分:1)

内部循环将执行 floor(log 2 n)次,因此总算法有 O(n.long(n))复杂性。

你可以看到内循环执行了这么多次

 n    times
-------------
 1      1
 2      2
 4      3
 8      4
16      5
32      6
...    ...
2ⁿ      n+1

等式的两边取 log 2 (),你得到:

 n     log(n+1)

log(n + 1) O(log(n))