猴子排序的期望复杂度推导(雾)

简介:   众所周知,猴子排序打破了排序算法$O(n\log{n})$的桎梏(雾),具体的话,显然最好情况一次成功就是$O(n)$,最坏情况那就$O(+\infty)$了。期望是多少呢?让我来推导一番(逃)。   首先,设序列长度为$n$,每次打乱序列和检测是否有序为$O(n)$,每次成功的概率为$\frac{1}{n!}$(全排列共$n!$种),失败的概率为$1-\frac{1}{n!}$。

  众所周知,猴子排序打破了排序算法$O(n\log{n})$的桎梏(雾),具体的话,显然最好情况一次成功就是$O(n)$,最坏情况那就$O(+\infty)$了。期望是多少呢?让我来推导一番(逃)。

  首先,设序列长度为$n$,每次打乱序列和检测是否有序为$O(n)$,每次成功的概率为$\frac{1}{n!}$(全排列共$n!$种),失败的概率为$1-\frac{1}{n!}$。我们令$X$为排序成功所需的打乱次数,则$P(X=k)=P_{成功}^{1}×P_{失败}^{k-1}$(乘法原理)。那么猴子排序的期望复杂度就是$O(E(X)*n)$

  X分布列如下表所示——

$X$ $1$ $2$ $3$ $\cdots$ $k$ $\cdots$ $+\infty$
$P(X=k)$ $\frac{1}{n!}$ $\left(1-\frac{1}{n!}\right)^{2-1}×\frac{1}{n!}$ $\left(1-\frac{1}{n!}\right)^{3-1}×\frac{1}{n!}$ $\cdots$ $\left(1-\frac{1}{n!}\right)^{k-1}×\frac{1}{n!}$ $\cdots$ $+\infty$

  有了分布列就来求X的期望吧——

$$E(X)=1×\frac{1}{n!}+2×\left(1-\frac{1}{n!}\right)^{2-1}×\frac{1}{n!}+3×\left(1-\frac{1}{n!}\right)^{3-1}×\frac{1}{n!}+\cdots+k×\left(1-\frac{1}{n!}\right)^{k-1}×\frac{1}{n!}+\cdots$$

$$=\frac{1}{n!}×\left[1×\left(1-\frac{1}{n!}\right)^{0}+2×\left(1-\frac{1}{n!}\right)^{1}+3×\left(1-\frac{1}{n!}\right)^{2}+\cdots+k×\left(1-\frac{1}{n!}\right)^{k-1}+\cdots\right]$$

$$=\frac{1}{n!}×\sum_{i=1}^{\infty}\left[{i×\left(1-\frac{1}{n!}\right)^{i-1}}\right]$$

  嗯……这个级数怎么求和啊?

  写个程序跑一下吧,求和求到二百万应该够了,再往上long double的精度也不资磁了……

#include<stdio.h>
#include<math.h>
int main()
{
    double fac=1;//n!
    for(int n=1;n<=10;n++)
    {
        long double E=0;
        fac*=n;
        for(int i=1;i<=2000000;i++)
        {
            E+=i*pow((fac-1.0)/fac,i-1);
        }
        E/=fac;
        printf("E(X)=%Lf    (n=%d)\n",E,n);        
    }
    return 0;
}

 

  运行结果——

 

  n大于8以后,long double都爆了……忽略它们!(观众:你……)

  于是我们猜想——$E(X)=n!$。

  上网一查,猴子排序复杂度果然是$O(n×n!)$,于是,猜想成立,推导完毕……(博主已被打死)

   

  留坑,等我会求那坨级数求和再来填坑吧(逃)大家别学我

   

目录
相关文章
|
8月前
|
算法 测试技术 C++
【动态规划】【状态压缩】【C++算法】1815 得到新鲜甜甜圈的最多组数
【动态规划】【状态压缩】【C++算法】1815 得到新鲜甜甜圈的最多组数
|
8月前
|
机器学习/深度学习 人工智能 算法
【代数学作业1完整版-python实现GNFS一般数域筛】构造特定的整系数不可约多项式:涉及素数、模运算和优化问题
【代数学作业1完整版-python实现GNFS一般数域筛】构造特定的整系数不可约多项式:涉及素数、模运算和优化问题
172 0
欧拉筛(最优的方法,对于找质数,细节讲解)
欧拉筛(最优的方法,对于找质数,细节讲解)
143 0
|
8月前
|
机器学习/深度学习 人工智能 算法
【代数学作业1-python实现GNFS一般数域筛】构造特定的整系数不可约多项式:涉及素数、模运算和优化问题
【代数学作业1-python实现GNFS一般数域筛】构造特定的整系数不可约多项式:涉及素数、模运算和优化问题
142 0
|
2月前
|
算法
基于改进自适应分段线性近似(IAPLA)的微分方程数值解法研究: 从简单动力系统到混沌系统的应用分析
IAPLA方法为复杂动力系统的数值模拟提供了一个灵活、高效且易于实现的框架,在众多实际应用中可以作为现有数值求解器的有效替代方案。
36 2
基于改进自适应分段线性近似(IAPLA)的微分方程数值解法研究: 从简单动力系统到混沌系统的应用分析
|
8月前
|
算法 测试技术 C#
【树上倍增】【内向基环树】【 图论 】2836. 在传球游戏中最大化函数值
【树上倍增】【内向基环树】【 图论 】2836. 在传球游戏中最大化函数值
|
8月前
|
算法 定位技术
插值、平稳假设、本征假设、变异函数、基台、块金、克里格、线性无偏最优…地学计算概念及公式推导
插值、平稳假设、本征假设、变异函数、基台、块金、克里格、线性无偏最优…地学计算概念及公式推导
180 2
|
决策智能
运筹优化学习03:Lingo非唯一最优解问题--油气开采构造处最优选择问题
运筹优化学习03:Lingo非唯一最优解问题--油气开采构造处最优选择问题
运筹优化学习03:Lingo非唯一最优解问题--油气开采构造处最优选择问题
|
算法 测试技术
全排列Ⅱ(中等难度,加入剪枝操作)
全排列Ⅱ(中等难度,加入剪枝操作)
129 0
全排列Ⅱ(中等难度,加入剪枝操作)
1005. K 次取反后最大化的数组和 : 简单分情况讨论贪心模拟题
1005. K 次取反后最大化的数组和 : 简单分情况讨论贪心模拟题