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



我已经看了一些类似的问题,并向我的同学征求了建议,但我对答案提出了质疑。

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

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

有人告诉我O(log(n))^2,但从我读到的和尝试的情况来看,它看起来像O(log。有什么帮助吗?

对于外循环的每次迭代,内循环重复自身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) ->(2)只是求和的简写
  • (2) ->(3)是因为log(a^b) = blog(a)
  • (3) ->(4)log_2(2)=1
  • (4) ->(5)算术级数和
  • (5) ->(6)给出了渐近表示法

最新更新