关于算法复杂度O(n/1+n/2+...+n/n)~O(nlogn)的证明

前言

在做算法题中,我们会经常分析到 O(n1+n2++nn) 的复杂度,然后我们都知道这个式子是等价于 O(nlogn) 的。在筛素数、字符串连续重复子串等很多算法中都有用到,用处之广,性能之优。今天不妨来证明下这个等价式。

O(n1+n2++nn) ~ O(nlogn)

分析

要证明 O(n1+n2++nn) ~ O(nlogn) ,只需证 O(1+12++1n) ~ O(lnn) ——式子1.

为了证明式子1,需要证明4个定理:

1. 确界存在定理

2. 单调有界数列必定收敛

3. 数列 {(1+1n)n} 单调增加, {(1+1n)n+1} 单调减少,两者收敛于同一极限

4. bn=1+12++1nlnn 收敛

确界存在定理——实数系连续性定理

描述:非空有上界的数集必有上确界;非空有下界的数集必有下确界。

证明:百度百科关于确界存在定理

单调有界数列必定收敛

描述:单调递增且有上界数列必定收敛,单调递减且有下界数列必定收敛

证明:

不妨设数列 {xn} 单调增加且有上界,根据确界存在定理,由 {xn} 构成的数集必有上确界 β ,满足:

(1) nN+:xnβ;

(2) ϵ>0,xn0:xn0>βϵ

N=n0 n>N:βϵ<xn0xnβ ,因而 {xnβ}<ϵ ,于是得到 limnxn=β

当数列单调递减且有下界时,同理。

数列 {(1+1n)n} 单调增加, {(1+1n)n+1} 单调减少,两者收敛于同一极限

证明:

xn={(1+1n)n} yn={(1+1n)n+1} ,利用平均不等式 a1a2anna1+a2++ann 得到

xn={(1+1n)n}1[n(1+1n)+1n+1]n+1=xn+1

1yn=(nn+1)n+11[(n+1)nn+1+1n+2]n+2=1yn+1

这表示 {xn} 单调增加,而 {yn} 单调减少。又由于 2=x1xn<yny1=4 ,可知数列 {xn} {yn} 都收敛(单调有界数列必收敛)。

因为 yn=xn(1+1n) ,所以它们具有相同的极限。习惯上用字母 e 来表示这一极限,即 limn(1+1n)n=limn(1+1n+1)n=e

e=2.718 281 828 459 是一个无理数。以 e 为底的对数称为自然对数,通常即为 lnx(=logex)

bn=1+12++1nlnn 收敛

证明:

由上一定理可知, (1+1n)n<e<(1+1n)n+1 ,由此得到 1n+1<lnn+1n<1n 。于是有:

bn+1bn=1n+1ln(n+1)+lnn=1n+1lnn+1n<0

bn=1+12+13++1nlnn>ln21+ln32+ln43++lnn+1nlnn=ln(n+1)lnn>0

这说明数列 {bn} 单调减少且有下界,从而收敛。(单调有界数列必收敛)

总结

通过以上四个定理证明了数列 bn=1+12++1nlnn 收敛,表示 1+12++1n 则与 lnn 同阶,因此可知 O(n1+n2++nn) ~ O(nlogn)

以后可能会附上用此公式的算法题目 (待续)

你可能感兴趣的:(算法证明)