zoukankan      html  css  js  c++  java
  • 证明 O(n/1+n/2+…+n/n)=O(nlogn)

    前言

    在算法中,经常需要用到一种与调和级数有关的方法求解,在分析该方法的复杂度时,我们会经常得到(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))

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

  • 相关阅读:
    UDP的坏处
    进程控制块(Process Control Block, PCB)
    分布式中一些关键概念的解释
    线程池的设计实现
    [原创] 同步、异步、阻塞、非阻塞详解
    常用场景对文件状态的影响
    echo使用说明,参数详解
    Linux下源码安装ffmpeg及ffmpeg的简单使用说明
    127.0.0.1、0.0.0.0和本机IP地址的区别和使用
    链路层的简介和MTU
  • 原文地址:https://www.cnblogs.com/qscqesze/p/4317860.html
Copyright © 2011-2022 走看看