我有以下算法:
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)吗?
答案 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))。