我已经查看过类似的问题了,并且已经向我的同学们征求意见,但我正在质疑答案。
这种算法的时间复杂度是多少?
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)))。有什么帮助吗?
答案 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)
说明:
log(a^b) = blog(a)