Light oj 1104 Birthday Paradox 生日悖论-雀巢原理

来源:互联网 发布:lol网络关注 编辑:程序博客网 时间:2024/06/09 22:28

1:关于生日悖论     生日悖论

假设有n个人在同一房间内,如果要计算有两个人在同一日出生的机率,在不考虑特殊因素的前提下,例如闰年、双胞胎,假设一年365日出生概率是平均分布的(现实生活中,出生机率不是平均分布的)。

  计算机率的方法是,首先找出p(n)表示n个人中,每个人的生日日期都不同的概率。假如n > 365,根据鸽巢原理其概率为0,假设n ≤ 365,则概率为:

  \bar p(n) = 1 \cdot \left(1-\frac{1}{365}\right) \cdot \left(1-\frac{2}{365}\right) \cdots \left(1-\frac{n-1}{365}\right) =\frac{364}{365} \cdot \frac{363}{365} \cdot \frac{362}{365} \cdots \frac{365-n+1}{365}

  因为第二个人不能跟第一个人有相同的生日(概率是364/365),第三个人不能跟前两个人生日相同(概率为363/365),依此类推。用阶乘可以写成如下形式:{ 365! \over 365^n (365-n)! }

  p(n)表示n个人中至少2人生日相同的概率:

  p(n) = 1 - \bar p(n)=1 - { 365! \over 365^n (365-n)! }

  n≤365,根据鸽巢原理, n大于365时概率为1。

  当n=23发生的概率大约是0.507。其他数字的概率用上面的算法可以近似的得出来:

np(n)1012%2041%3070%5097%10099.99996%20099.9999999999999999999999999998%3001 − (7 × 10−73)3501 − (3 × 10−131)≥366100%

  注意所有人都是随机选出的:作为对比,q(n)表示房间中 n个其他人中与特定人(比如你)有相同生日的概率:

   q(n) = 1- \left( \frac{364}{365} \right)^n

  当n = 22时概率只有大约0.059,约高于十七分之一。如果n个人中有50%概率存在某人跟有相同生日, n至少要达到253 。注意这个数字大大高于\frac{365}{2}=182.5.究其原因是因为房间内可能有些人生日相同。==数学论证(非数字方法)==


#include<cstdio>#include<algorithm>using namespace std;int main(){int t,k=1;scanf("%d",&t);while(t--){int n,num=0;scanf("%d",&n);double p=1.0;// p不能等于 1 for(int i=0;;i++){p=p*(1-(double)i/n);num++;if(1.0-p>=0.5)break;}//while(p>0.5)//{//p=(n-1)/n*p;//n--;//num++;//}printf("Case %d: %d\n",k++,num-1);//邀请人数 总人数减 1 }} /*for(int i=0;;i++){p=p*(1-double(i/n));num++;if(1-p>=0.5)break;}*/


阅读全文
0 0