估计3个人分享生日的概率

时间:2011-02-14 08:40:00

标签: probability

互联网上有大量资源在讨论着名的生日悖论。我很清楚你如何计算两个人分享生日的概率,即P(s)= 1-P(d)。然而,如果我问自己一些显然更简单的东西我会失速:首先,假设我生成两个随机的生日。生日快乐就像掷硬币一样。要么是两个人分享生日(Heads),要么他们不分享生日(Tail)。运行500次,最终结果(nbr Heads / 500)将以某种方式接近0.5

但如果我生成三个随机生日,我怎么想这个呢?那我怎么估计概率呢?显然,我的硬币类比不适用。

我的问题的第2部分:一旦我弄清楚了上述情况,我将需要进行扩展并生成30或50个生日。是否有推荐的技术或算法来隔离大型相同的生日?我应该将它们放入数组并循环它们吗?

谢谢


这就是我认为我需要的东西:

part1的

r = 25,即每次试运行都会产生25个生日

试验1> 3个重复:0

试验2> 3个重复:0

试验3> 3个重复:2

试验4> 3个重复:1

...

T100> 3个重复:2

估计3人在25 =(0 + 0 + 2 + 1 + ... + 2)/ 100

的房间里分享生日的概率

第2部分

为2个重复项创建一个数组,为3个重复项创建一个数组,为多于3个重复项创建一个数组

将每个生成的生日逐个添加到第一个数组中。但在此之前,循环遍历数组以查看它是否已存在。如果是这样,将其添加到第二个数组,但在此之前重复上述过程,依此类推

它似乎不是一个非常有效的算法:)建议在这里改进Big O?

3 个答案:

答案 0 :(得分:1)

创建一个长度为365的整数数组,初始化为0.然后在1-365之间生成N(在您的情况下为25)随机数,并在数组中增加该数字(即.bdays [random_value] ++)。由于您只对发生碰撞感兴趣,因此在增加数组中的数字后立即检查它是否大于2(如果是,则会发生第二次碰撞,这意味着有3个人具有相同的生日)。跟踪碰撞并根据需要多次执行(1000)。

最后,碰撞比率/ 1000将是您要求的值。

并且,没有投掷硬币类比是错误的。

答案 1 :(得分:0)

在CrossValidated上查看this类似问题及其答案,但我认为再次获得基本知识确实值得考虑经典生日问题。

问题的第二部分:取决于您使用的语言。我绝对建议使用R来解决这样的问题,因为通过简单的unique调用可以轻松地检查列表/向量/数据框中的相同生日。要运行这样简单的MC模拟R再次非常方便,请检查上面链接的第二个答案。

答案 2 :(得分:0)

听起来你的第一个任务就是创建一个生成随机生日的方法。为简单起见,您可以使用数字1-365表示独特的生日。

在ArrayList中存储许多随机生日(在第一种情况下更晚一次)作为字符串。您将需要使用循环来调用随机数函数并将值存储在列表中。

然后创建一个函数来搜索ArrayList以获取重复项。如果有任何重复(无论多少)那么这就是Heads的结果。如果没有匹配则是Tails。

你的概率将与50/50大不相同,直到你达到20左右。

相关问题