有一种算法具有时间复杂度
T(n)=T(n-1)+1/n if n>1
=1 otherwise
我正在解决它的渐近复杂性,并将命令作为'n',但给出的答案是'log n'。这是对的吗?如果是log n,那么为什么?
答案 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
是递减函数,所以:
我们从左侧部分的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)