我已经看了一些类似的问题,并向我的同学征求了建议,但我对答案提出了质疑。
这个算法的时间复杂度是多少?
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)给出了渐近表示法