就一个好了·~~~黑翼
昵称昵称。。。。注意注意。。。。
生日悖论是说:如果一个房间里有23个人,那么两个人有相同生日的概率要大于50%。这就意味着这个悖论有更高的概率适用于一个典型的标准小学班级(30人)。对于60或者更多的人,这种概率要大于99%。
从引起逻辑矛盾的角度来说生日悖论并不是一种悖论,这一悖论在某种意义上是反驳一般直觉数学事实。大多数人猜测,机会应该远远小于50%。 计算与此相关的概率被称为生日问题,隐藏在它后面的数学理论已被用于设计著名的密码攻击方法:生日攻击。
对此悖论的解释:理解生日悖论的关键在于领会相同生日的搭配可以是相当多的。如在前面所提到的例子,23个人可以产生23×22÷2=253 种不同的搭配,而这每一种搭配都有成功相等的可能。从这样的角度看,在253种搭配中产生一对成功的配对也并不是那样的不可思议。
换一个角度,如果你进入了一个有着22个人的房间,房间里的人中会和你有相同生日的概率便不是50:50了,而是变得非常低。原因是这时候只能产生22种不同的搭配。生日问题实际上是在问:任何23个人中会有两人生日相同的概率是多少?
Birthday Paradox - 生日悖论
初级或然率(机率)与统计学课程里,最为人津津乐道的就是生日问题 (Birthday Problem):探讨 N 个人里,随便选两个人,生日是同一天的机率问题 (同月同日,但不见得要同年)。
第二个课题就是:N 个人里的 N 要有多大,才能让机率高於 50% 呢? 答案是 23,这样的数字,小到让人觉得不可思议。基於此,我们常称此为生日悖论 (Birthday Paradox;也有人称「生日矛盾」)。
这个理论假定有两个前提:
1. 没有人的生日是二月二十九。
2. 每个人的生日乃平均分散於一年的 365 天内。
此问题首先要提到的就是先解决互补问题 (complementary problem),这也是比较简单的一部份:随便选,要选几个人是生日完全不同的? 我们可以把它写成一个递回函数 (recursive function):
double different_birthdays(int n)
{
return n == 1 ? 1.0 : different_birthdays(n-1) * (365.0-(n-1))/365.0;
}
显然,N = 1 的机率为 1,N>1 的机率则有两种结果:
1. 前 N-1 个人拥有完全不同的生日。
2. 第 N-th 个人的生日与前 N-1 个人不同。
展现此机率的程式可能长得像这样:
void main(void)
{
int n;
for (n = 1; n <= 365; n++)
printf("%3d: %e\n", n, 1.0-different_birthdays(n));
}
产生结果如下:
1: 0.000000e+00
2: 2.739726e-03
3: 8.204166e-03
4: 1.635591e-02
5: 2.713557e-02
***
20: 4.114384e-01
21: 4.436883e-01
22: 4.756953e-01
23: 5.072972e-01
24: 5.383443e-01
25: 5.686997e-01
***
结论则为,在 N 个人里,至少有两个人拥有相同生日,其机率大於 0.5 者,N 为 23。
欢迎光临 YUKI 飛雪之城 (https://yukict.com/bbs/) | Powered by Discuz! 6.0.0 |