前言
在算法中,经常需要用到一种与调和级数有关的方法求解,在分析该方法的复杂度时,我们会经常得到(O(frac{n}{1}+frac{n}{2}+ldots+frac{n}{n}))的复杂度,然后我们都知道这个式子是等价于(O(nlog n))的。在筛素数、字符串连续重复子串等很多算法中都有用到,用处之广,性能之优。今天不妨来证明下这个等价式。
(O(frac{n}{1}+frac{n}{2}+ldots+frac{n}{n}))~(O(nlog n))
分析
要证明(O(frac{n}{1}+frac{n}{2}+ldots+frac{n}{n}))~(O(nlog n)),只需证(O(1+frac{1}{2}+ldots+frac{1}{n}))~(O(ln n))——式子1.
为了证明式子1,需要证明4个定理:
1. 确界存在定理
2. 单调有界数列必定收敛
3. 数列({(1+frac{1}{n})^n})单调增加,({(1+frac{1}{n})^{n+1}})单调减少,两者收敛于同一极限
4. (b_n=1+frac{1}{2}+ldots+frac{1}{n}-ln n) 收敛
确界存在定理——实数系连续性定理
描述:非空有上界的数集必有上确界;非空有下界的数集必有下确界。
证明:<a href="http://baike.baidu.com/link?url=NojNWL0qcJWW20mxekU1GcfeD1Tp-0-JtF4oyRio7w9Th-ifVdybvf3PaSzmZKXZywk9mCGnlQ9mkPk-NySvn1b_DUqfs-Boez0kGdtwwgN9cgLyW4xYJfHUVGhdiIHQh3hilNBwuRJxARBOsGkqrSpDfuuEwxa56NjmcEgwrlSiddNVOjmmH6WirfboiLNMPo0a06RFoeFRasTvJSUaPa
" target="_blank">百度百科关于确界存在定理
单调有界数列必定收敛
描述:单调递增且有上界数列必定收敛,单调递减且有下界数列必定收敛
证明:
不妨设数列({x_n})单调增加且有上界,根据确界存在定理,由({x_n})构成的数集必有上确界(eta),满足:
(1) (forall nin N^+:x_nleq eta;)
(2) (forall epsilon>0,exists x_{n_0}:x_{n_0}>eta-epsilon。)
取(N=n_0),(forall n>N:eta-epsilon<x_{n_0}leq x_nleq eta),因而({x_n-eta}<epsilon),于是得到(lim_{n ightarrow infty}x_n=eta)
当数列单调递减且有下界时,同理。
数列({(1+frac{1}{n})^n})单调增加,({(1+frac{1}{n})^{n+1}})单调减少,两者收敛于同一极限
证明:
记(x_n={(1+frac{1}{n})^n}),(y_n={(1+frac{1}{n})^{n+1}}),利用平均不等式(sqrt[n]{a_1a_2ldots a_n}leqfrac{a_1+a_2+ldots+a_n}{n})得到
(x_n={(1+frac{1}{n})^n}cdot1leq [frac{n(1+frac{1}{n})+1}{n+1}]^{n+1}=x_{n+1})
(frac{1}{y_n}=(frac{n}{n+1})^{n+1}cdot 1leq[frac{(n+1)frac{n}{n+1}+1}{n+2}]^{n+2}=frac{1}{y_{n+1}})
这表示({x_n})单调增加,而({y_n})单调减少。又由于(2=x_1leq x_n<y_nleq y_1=4),可知数列({x_n}),({y_n})都收敛(单调有界数列必收敛)。
因为(y_n=x_n(1+frac{1}{n})),所以它们具有相同的极限。习惯上用字母(e)来表示这一极限,即(lim_{n ightarrowinfty}(1+frac{1}{n})^n=lim_{n ightarrowinfty}(1+frac{1}{n+1})^n=e)
(e=2.718 281 828 459cdots)是一个无理数。以(e)为底的对数称为自然对数,通常即为(ln x(=log_ex))。
(b_n=1+frac{1}{2}+ldots+frac{1}{n}-ln n) 收敛
证明:
由上一定理可知,((1+frac{1}{n})^n<e<(1+frac{1}{n})^{n+1}),由此得到(frac{1}{n+1}<ln frac{n+1}{n}<frac{1}{n})。于是有:
(b_{n+1}-b_n=frac{1}{n+1}-ln (n+1)+ln n=frac{1}{n+1}-ln frac{n+1}{n}<0)
(b_n=1+frac{1}{2}+frac{1}{3}+ldots+frac{1}{n}-ln n>ln frac{2}{1}+ln frac{3}{2}+ln frac{4}{3}+ldots+ln frac{n+1}{n}-ln n=ln (n+1)-ln n>0)
这说明数列({b_n})单调减少有下界,从而收敛。(单调有界数列必收敛)
总结
已证明(O(1+frac{1}{2}+ldots+frac{1}{n}))~(O(ln n)),因此可知(O(frac{n}{1}+frac{n}{2}+ldots+frac{n}{n}))~(O(nlog n))