Language agnostic 生日悖论:如何以编程方式估计3和N人共享生日的概率

Language agnostic 生日悖论:如何以编程方式估计3和N人共享生日的概率,language-agnostic,probability,birthday-paradox,Language Agnostic,Probability,Birthday Paradox,互联网上有大量资源讨论著名的生日悖论。我很清楚你是如何计算两个人共享一个生日的概率的,即P(相同)=1-P(不同)。然而,如果我问自己一些明显更简单的问题,我会拖延:首先,假设我随机生成两个生日。得到同样的生日就像扔硬币一样。这两个人要么共用一个生日(头),要么不共用一个生日(尾)。运行500次,最终结果(#Heads/500)将接近0.5 问题1)但如果我随机生成三个生日,我会怎么想?那我怎么估计概率呢?显然,我的硬币类比不适用 问题2)一旦我了解了以上内容,我就需要扩大规模,创造30或50

互联网上有大量资源讨论著名的生日悖论。我很清楚你是如何计算两个人共享一个生日的概率的,即
P(相同)=1-P(不同)
。然而,如果我问自己一些明显更简单的问题,我会拖延:首先,假设我随机生成两个生日。得到同样的生日就像扔硬币一样。这两个人要么共用一个生日(头),要么不共用一个生日(尾)。运行500次,最终结果(#Heads/500)将接近0.5

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

  • 问题2)一旦我了解了以上内容,我就需要扩大规模,创造30或50个生日。有没有推荐的技术或算法可以从一个大的数据集中分离出相同的生日?我是否应该将它们放入数组中并在其中循环

以下是我认为我需要的:

Q1) 问题2)
  • 创建一个包含2个副本的数组、一个包含3个副本的数组和一个包含3个以上副本的数组
  • 将每个生成的生日逐个添加到第一个数组中。但在执行此操作之前,请在数组中循环以查看它是否已经在其中。如果是,请将其添加到第二个数组中,但在执行此操作之前,请重复上述过程,依此类推
  • 这似乎不是一个非常有效的算法:)改进大O的建议
在交叉验证中检查类似的问题及其答案,但我认为确实值得再次思考经典的生日问题,以获得基本知识


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

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

在ArrayList中以字符串形式存储任意多个随机生日(第一种情况下为2个,以后更多)。您需要使用循环调用随机数函数并将值存储在列表中

然后创建一个函数来搜索ArrayList中的重复项。如果存在任何重复项(无论有多少),那么这就是结果。如果没有火柴,那就是一条尾巴


在你达到20左右之前,你的概率将远远不同于50/50。

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

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


而且,不扔硬币的比喻是错误的。

“得到同样的生日就像扔硬币”;你的逻辑在这里支离破碎。一年中有365天(如果你算闰年,则为366天),因此如果一个人的生日是1月1日,而你随机选择另一个日期,那么选择1月1日的概率不是1/2,而是1/365。这不是一个真正的编程问题,而是一个数学问题。n个人共享生日(一次共享)的概率正好是(1/365)^(n-1)。@Jens,是的,这与编程有关,因为我需要编写一个(java)程序来生成r个随机生日,然后根据结果(共享生日),我需要对共享生日的s进行概率估计。但在写任何东西之前,我需要先想清楚code@darioo:如果我10次随机生成两个生日,并且观察到3次生日匹配,你如何将该比率(3/10)与365天联系起来?这是我写的另一篇文章,讨论在数组中搜索重复项的问题。我觉得在创建生日和填充数组时搜索重复项会比在创建生日和填充数组之后更好。请看一下我的新帖子:
r = 25 i.e. each trial run generates 25 birthdays

Trial 1 >
3 duplicates: 0

Trial 2 >
3 duplicates: 0

Trial 3 >
3 duplicates: 2

Trial 4 >
3 duplicates: 1

...

T100 >
3 duplicates: 2

estimated probability of 3 persons sharing a birthday in a room of 25 = (0+0+2+1+...+2)/100