• 概率分析和随机算法(2)——算法导论(6)


    1. 引言

        接下来几篇将通过几个有趣的例子继续探究概率分析随机算法

    2. 生日悖论

    (1) 问题的提出

        我们的第一个例子是生日悖论:一个屋子里人数必须要达到多少人,才能使其中两人的生日相同的机会达到50%。你可能认为是365 / 2,但事实上,答案是一个很小的数值。下面我们对这个问题进行分析。

    (2) 分析问题

        我们首先找出问题的关键。这个问题的关键就是:人数(设为k)和他们中两人生日相同的概率(设为P1)的关系。要分析P1,我们可以从两个方面(直接正面思考和从其对立面思考)进行思考:

    需要提前说明的是,

        a. 我们对屋子里的k个人进行了从1~k的依次编号;

        b. 我们不考虑闰年的情况,即1年是N = 365天。我们对每一天也进行了编号,编号方式是一年中的第n天编号为n;

        c. 我们设bi表示编号为i的人的生日,bi = n表示编号为i的人的生日是编号为n的那天。显然有,1≤bi≤365。

        d. 我们还假设生日均匀分布在一年中的n天中,因此概率P(bi = n) = 1 / N;

       

        方式①:我们直接从正面去思考,即存在两人生日相同的概率

    不失一般性,我们记bi和bj分别表示i和j两人的生日,那么两人生日落在第n天的概率P(bi = bj = n) = P(bi = n) * P(bj = n) = 1 / N²。那么两人生日落在同一天的概率:image

    我们用计数变量Xij来表示i和j两人的生日是否相同(如果相同Xij = 1,否则Xij = 0),由上面的结论,P(Xij) = 1 / N;我们设随机变量X表示k人中生日两两相同的对数。则:

    image

    image

    由E(X) ≥1可解得,n≥28。这就是说,屋子里至少需要有28人,我们可以期望找到至少一对人生日相同。

        方式②:我们再从对立面去考虑该问题,即任意两人生日都不同的概率

    我们设Ai表示对于所有j<i,i与j生日都不同的事件;设Bk表示k个人生日都不同的事件。则有:

    image

    贝叶斯定理

    image

    由此我们可以递归的得到:

    image

    显然,P(B1)=1,而P(Ak|Bk-1)=(n-k+1)/n(因为P(Ak|Bk-1)的意思是在k-1人生日都不同的情况下,第k个人生日与前面k-1个人不同的概率),因此有:image

    有不等式image ,我们得出:

    image

    由1-P(Bk)<=50%得:k≥23。这就是说如果至少有23个人在一间屋子里,那么至少有两个人生日相同的概率至少是50%。

    3. 总结

        第一种分析方式使用了指示器随机变量,给出了相同生日期望为1时的人数;而第二种方式仅使用了概率,确定了为使至少存在一对人生日相同的事件发生的概率大于50%,至少需要多少人。虽然两种情形下人的准确数目不同,但它们在渐进阶数上是相等的,都为θ(√n)(如果你去解上面的不等式,你就会发现)。

    ps:以上内容均摘自《算法导论》中文译本。本人只是提取出文中个人认为比较重要的点,加入了一些个人理解,仅供参考。

  • 相关阅读:
    neutron-server Connection pool is full, discarding connection 连接池过满
    C#中值类型与引用类型
    抽象类与接口的比较
    XML解析与文件存取
    Json序列化与反序列化
    关于Stream系列实战
    CTS,CLS,CLR
    冒泡排序——算法
    Js 调用 webservice
    使用WebService的优点
  • 原文地址:https://www.cnblogs.com/dongkuo/p/4809882.html
Copyright © 2020-2023  润新知