T(n)= T(n-1)+ 1 / n的渐近复杂度

时间:2013-03-27 09:58:05

标签: algorithm math recursion

有一种算法具有时间复杂度

    T(n)=T(n-1)+1/n if n>1
        =1          otherwise

我正在解决它的渐近复杂性,并将命令作为'n',但给出的答案是'log n'。这是对的吗?如果是log n,那么为什么?

2 个答案:

答案 0 :(得分:9)

可以很容易地看出(或通过归纳正式证明)T(n)是从1到n的k值的1 / k之和。这是 n harmonic number,H n = 1 + 1/2 + 1/3 + ... + 1 / n。

渐近地,谐波数以log(n)的顺序增长。这是因为总和的值接近于从1到n的1 / x的积分值,它等于n的自然对数。实际上,H n = ln(n)+γ+ O(1 / n)其中γ是常数。由此,很容易证明T(n)=Θ(log(n))。

答案 1 :(得分:3)

更多详情:

使用H(N) = 1 + 1/2 + 1/3 + ... + 1/N

函数x :-> 1/x是递减函数,所以:

enter image description here

我们从左侧部分的1 to N求和,并从2 to N求和,我们加1,得到:

enter image description here

然后我们计算左右部分: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