有一种算法具有时间复杂度
T(n)=T(n-1)+1/n if n>1
=1 otherwise
我正在解决它的渐近复杂性,并将顺序设为“n”,但给出的答案是“log n”。这是对的吗?如果是log n,那为什么?
很容易看出(或用归纳法正式证明)T(n) 是从 1 到 n 的 k 值的 1/k 之和。这是第n次谐波数,H n = 1 + 1/2 + 1/3 + ... + 1/n。
渐近地,谐波数在 log(n) 的数量级上增长。这是因为该和的值接近于 1/x 从 1 到 n 的积分,它等于 n 的自然对数。事实上,H n = ln(n) + γ + O(1/n) 其中 γ 是一个常数。由此,很容易证明 T(n) = Θ(log(n))。
更多细节:
和H(N) = 1 + 1/2 + 1/3 + ... + 1/N
该函数x :-> 1/x
是一个递减函数,因此:
我们从1 to N
左边求和,右边部分求和,2 to N
然后加上1
,我们得到:
然后我们计算左右部分:ln(N+1) <= H(N) <= 1 + ln(N)
这意味着 H(N)/ln(N) -> 1
因此H(N)=Θ(log(N))
(来自http://fr.wikipedia.org/wiki/S%C3%A9rie_harmonique#.C3.89quivalent_de_Hn)