我被要求分析以下递归函数的渐近时间复杂度:
for-all k ≥ 1:
T(n) = n + T(n/2) + T(n/4) + T(n/8) + .... + T(n/2^k)
我能够证明:
T(n) = O(n⋅log n)
和T(n) = Ω(n)
,
但我正在寻找一个更严格的界限(Big Theta)。
答案 0 :(得分:0)
首先:
我通过这种方式理解“ for-all k> = 1 ”:k = 1
到k = m
其中2m-1 ≤ n ≤ 2m
。
基本上m = log₂(n)
成立了。
看看我的计算:
T(n) = n + Σk=1,...,m T(n/2k) = n + T(n/2) + Σk=2,...,m T(n/2k) = n + n/2 + 2⋅Σk=2,...,m T(n/2k) = ... = n + Σk=1,...,m k⋅n/2k = n + n⋅Σk=1,...,m k/2k = n + n⋅(2 - 2-mm - 21-m) ≤ n + 2⋅n = 3n
所以T(n)
位于Θ(n)
。
注意:
您还可以通过积分Σk=1,...,m k/2k
估算s(m) = ∫1m k/2k dk
此处limm → ∞s(m) = 2
也有效。