依赖嵌套循环的时间复杂度

时间:2015-11-06 10:22:02

标签: nested time-complexity

我已经查看过类似的问题了,并且已经向我的同学们征求意见,但我正在质疑答案。

这种算法的时间复杂度是多少?

for (i = 1; i < n; i *= 2)
    for (j = 1; j < i; j *= 2)
        \\ c elementary operations   

我被告知O(log(n))^ 2,但是从我读过的内容并尝试它看起来像O(log(n)* log(log(n)))。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

对于外循环的每次迭代,内循环重复log_2(i)次。

让那个加起来

(1) T(n) = log_2(1) + log_2(2) + log_2(4) + log_2(8) + ... + log_2(n)
(2) T(n) = sum { log_2(2^i)    | i=0,1,..,log_2(n) }
(3) T(n) = sum { i * log_2(2)  | i=0,1,...,log_2(n) } 
(4) T(n) = 0 + 1 + ... + log_2(n)
(5) T(n) = (log_2(n) + 1)(log_2(n))/2
(6) T(n) is in O(log_2(n)^2)

说明:

  • (1) - &gt; (2)简单的总结简写
  • (2) - &gt; (3)是因为log(a^b) = blog(a)
  • (3) - &gt; (4)log_2(2)= 1
  • (4) - &gt; (5)Sum of arithmetic progression
  • (5) - &gt; (6)给出渐近符号