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²。那么两人生日落在同一天的概率:
我们用计数变量Xij来表示i和j两人的生日是否相同(如果相同Xij = 1,否则Xij = 0),由上面的结论,P(Xij) = 1 / N;我们设随机变量X表示k人中生日两两相同的对数。则:
由E(X) ≥1可解得,n≥28。这就是说,屋子里至少需要有28人,我们可以期望找到至少一对人生日相同。
方式②:我们再从对立面去考虑该问题,即任意两人生日都不同的概率。
我们设Ai表示对于所有j<i,i与j生日都不同的事件;设Bk表示k个人生日都不同的事件。则有:
由贝叶斯定理,
由此我们可以递归的得到:
显然,P(B1)=1,而P(Ak|Bk-1)=(n-k+1)/n(因为P(Ak|Bk-1)的意思是在k-1人生日都不同的情况下,第k个人生日与前面k-1个人不同的概率),因此有:
有不等式 ,我们得出:
由1-P(Bk)<=50%得:k≥23。这就是说如果至少有23个人在一间屋子里,那么至少有两个人生日相同的概率至少是50%。
3. 总结
第一种分析方式使用了指示器随机变量,给出了相同生日期望为1时的人数;而第二种方式仅使用了概率,确定了为使至少存在一对人生日相同的事件发生的概率大于50%,至少需要多少人。虽然两种情形下人的准确数目不同,但它们在渐进阶数上是相等的,都为θ(√n)(如果你去解上面的不等式,你就会发现)。
ps:以上内容均摘自《算法导论》中文译本。本人只是提取出文中个人认为比较重要的点,加入了一些个人理解,仅供参考。