• 快速排序平均时间复杂度分析


    x 1 , … , x n x_1,\dots,x_n x1,,xn进行快速排序
    partition node: x [ k ] x[k] x[k]为随机划分元
    x [ k ] x[k] x[k] 被选择的概率为 1 / n 1/n 1/n,令 C n C_n Cn 为规模为n的问题的比较次数(即 T ( n ) T(n) T(n) )
    C n = ( n − 1 ) + 1 n ∑ k = 1 n ( C k − 1 + C n − k ) = ( n − 1 ) + 1 n ∑ k = 1 n C k − 1 + 1 n ∑ k = 1 n C n − k = ( n − 1 ) + 1 n ∑ k = 0 n − 1 C k + 1 n ∑ k = 0 n − 1 C k = ( n − 1 ) + 2 n ∑ k = 0 n − 1 C k Cn=(n1)+1nnk=1(Ck1+Cnk)=(n1)+1nnk=1Ck1+1nnk=1Cnk=(n1)+1nn1k=0Ck+1nn1k=0Ck=(n1)+2nn1k=0Ck

    Cn=(n1)+n1k=1n(Ck1+Cnk)=(n1)+n1k=1nCk1+n1k=1nCnk=(n1)+n1k=0n1Ck+n1k=0n1Ck=(n1)+n2k=0n1Ck
    因此
    n C n = n ( n − 1 ) + 2 ∑ k = 0 n − 1 C k ① nC_n=n(n-1)+2\sum_{k=0}^{n-1}C_k\quad ① nCn=n(n1)+2k=0n1Ck
    n − 1 n-1 n1 代入 n n n,得
    ( n − 1 ) C n − 1 = ( n − 1 ) ( n − 2 ) + 2 ∑ k = 0 n − 2 C k ② (n-1)C_{n-1}=(n-1)(n-2)+2\sum_{k=0}^{n-2}C_k\quad② (n1)Cn1=(n1)(n2)+2k=0n2Ck
    ① − ② ①-②
    n C n − ( n − 1 ) C n − 1 = 2 ( n − 1 ) + 2 C n − 1 ⇒ n C n = 2 ( n − 1 ) + ( n + 1 ) C n − 1 ③ ⇒ C n n + 1 = C n − 1 n + 2 ( n − 1 ) n ( n + 1 ) nCn(n1)Cn1=2(n1)+2Cn1nCn=2(n1)+(n+1)Cn1Cnn+1=Cn1n+2(n1)n(n+1)
    nCn(n1)Cn1=2(n1)+2Cn1nCn=2(n1)+(n+1)Cn1n+1Cn=nCn1+n(n+1)2(n1)

    D n = C n n + 1 D_n=\frac{C_n}{n+1} Dn=n+1Cn
    D n = D n − 1 + 2 ( n − 1 ) n ( n + 1 ) ④ D_n=D_{n-1}+\frac{2(n-1)}{n(n+1)}\quad④ Dn=Dn1+n(n+1)2(n1)
    因此
    D n = 2 ∑ j = 1 n j − 1 j ( j + 1 ) = 2 ∑ j = 1 n 2 j + 1 − 2 ∑ j = 1 n 1 j = 4 ∑ j = 2 n + 1 1 j − 2 ∑ j = 1 n 1 j = 2 ∑ j = 1 n 1 j + 4 n + 1 − 4 = 2 H n − 4 n n + 1 ≈ 2 ln ⁡ n + O ( 1 ) = 2 log ⁡ 2 e log ⁡ 2 n + O ( 1 ) ≈ 1.44 log ⁡ 2 n Dn=2nj=1j1j(j+1)=2nj=12j+12nj=11j=4n+1j=21j2nj=11j=2nj=11j+4n+14=2Hn4nn+12lnn+O(1)=2log2elog2n+O(1)1.44log2n
    Dn=2j=1nj(j+1)j1=2j=1nj+122j=1nj1=4j=2n+1j12j=1nj1=2j=1nj1+n+144=2Hnn+14n2lnn+O(1)=log2e2log2n+O(1)1.44log2n

    因此
    C n ≈ 1.44 n log ⁡ 2 n = O ( n log ⁡ n ) C_n\approx1.44n\log_2 n=O(n\log n) Cn1.44nlog2n=O(nlogn)

  • 相关阅读:
    说一说设备综合效率OEE
    React获取DOM和获取组件实例的方式
    六级(2021/6-1) Text2
    低代码平台适用于大中型企业吗?
    Python中8种经典数据结构 之 集合
    Java Spring Beans.xml 里的 Bean 定义是如何被解析出来的
    高性能限流器Guava RateLimiter
    Log4j2再发新版本2.16.0,完全删除Message Lookups的支持,加固漏洞防御
    golang 实现带令牌限流的JWT demo
    【毕业设计】基于SSM与vue的在线考试系统 -spring java web
  • 原文地址:https://blog.csdn.net/mirrorboat/article/details/133377127