经典算法的平均复杂度分析

改进的冒泡排序

由于没有改变相邻逆序对互换的本质,数组内平均有 n 2 n^2 n2的逆序对就决定了算法必然复杂度为 O ( n 2 ) \Omicron(n^2) O(n2)

Quick Sort

排好序的序列为Z[1:N],则认定指标随机变量如下:

X i j = I { Z i 与 Z j 在 Q S 的 过 程 中 发 生 了 比 较 } X_{ij}=I\{Z_{i}与Z_{j}在QS的过程中发生了比较\} Xij=I{ZiZjQS}

设算法时间复杂度为 T ( n ) T(n) T(n),则有:
T ( n ) = E [ ∑ i &lt; j X i j ] = ∑ i &lt; j E [ X i j ] = ∑ i &lt; j P R { Z i 与 Z j 比 较 的 概 率 } \begin{aligned} T(n) = &amp; E[\sum_{i&lt;j} X_{ij}] \\ = &amp; \sum_{i&lt;j} E[X_{ij}] \\ = &amp; \sum_{i&lt;j} PR\{Z_{i}与Z_{j}比较的概率\} \end{aligned} T(n)===E[i<jXij]i<jE[Xij]i<jPR{ZiZj}
Z i 与 Z j Z_{i}与Z_{j} ZiZj会不会进行比较需要看算法是如何进行的,在QS中即是看pivot如何选:

  1. 若pivot选择 [ Z 1 , Z i ) ⋃ ( Z j , Z n ] , 则 对 它 们 比 不 比 较 没 有 影 响 [Z_{1},Z_{i})\bigcup(Z_{j},Z_{n}],则对它们比不比较没有影响 [Z1,Zi)(Zj,Zn],
  2. 若pivot选择 Z i 和 Z j Z_{i}和Z_{j} ZiZj则它们必会比较
  3. 若pivot选择 ( Z i 和 Z j ) (Z_{i}和Z_{j}) (ZiZj)则它们必不会比较

将不影响结果的区间去除,那么 Z i 与 Z j Z_{i}与Z_{j} ZiZj进行比较的概率即是 2 j − i + 1 \frac{2}{j-i+1} ji+12
于是结果即是:
∑ i &lt; j 2 j − i + 1 ∈ O ( n l o g n ) \begin{aligned} \sum_{i&lt;j} \frac{2}{j-i+1}\in \Omicron(nlogn) \end{aligned} i<jji+12O(nlogn)

闭哈希查找

失败查找

设哈希表大小为m,内有n个元素

因为失败查找一定会将链长全部走完,因此若记 n m = α \frac{n}{m}=\alpha mn=α(平均链长)则有:
T ( n ) ∈ Θ ( 1 + α ) \begin{aligned} T(n)\in \Theta(1+\alpha) \end{aligned} T(n)Θ(1+α)

成功查找

设哈希表大小为m,内有n个元素,将表内元素按入表顺序排序,排好的序列记为Z[1:n],算法的时间复杂度为T(n),则有:
T ( n ) = 1 n ∗ ∑ i = 1 n ( 1 + ∑ j = i + 1 n 1 m ) = 1 + 1 n ∗ ∑ i = 1 n n − i m = 1 + 1 n m ∗ ∑ i = 1 n ( n − i ) ∈ &ThickSpace; Θ ( 1 + n 2 n m ) ∈ &ThickSpace; Θ ( 1 + n m ) \begin{aligned} T(n)=&amp;\frac1n *\sum_{i=1}^n (1+\sum_{j=i+1}^n\frac1m)\\ =&amp;1+\frac1n*\sum_{i=1}^n\frac{n-i}{m}\\ =&amp;1+\frac{1}{nm}*\sum_{i=1}^n (n-i)\\ \in\;&amp;\Theta (1+\frac{n^2}{nm})\\ \in\;&amp;\Theta (1+\frac{n}{m}) \end{aligned} T(n)===n1i=1n(1+j=i+1nm1)1+n1i=1nmni1+nm1i=1n(ni)Θ(1+nmn2)Θ(1+mn)
若记 n m = α \frac{n}{m}=\alpha mn=α则有:
T ( n ) ∈ Θ ( 1 + α ) \begin{aligned} T(n)\in \Theta(1+\alpha) \end{aligned} T(n)Θ(1+α)

开哈希表查找

有点过于复杂…懒得写出来了,大概意思与闭hash差不多,平均查找长度的求解涉及太多了,全是gay论

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值