互联网上有大量资源讨论著名的生日悖论。我很清楚你如何计算两个人共享生日的概率,即P(same) = 1 - P(different)
。但是,如果我问自己一些显然更简单的问题,我会拖延:首先,假设我生成了两个随机生日。获得相同的生日就像扔硬币一样。两个人要么共享一个生日(Heads),要么他们不共享一个生日(Tail)。运行 500 次,最终结果 (#Heads/500) 将接近 0.5
Q1) 但是,如果我生成三个随机生日,我该如何考虑呢?那我该如何估计概率呢?显然我的硬币类比不适用。
Q2)一旦我弄清楚了上述情况,我将需要扩大规模并生成 30 或 50 个生日。是否有推荐的技术或算法从大集合中分离出相同的生日?我应该将它们放入数组并循环遍历它们吗?
这是我认为我需要的:
Q1)
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
Q2)
- 为 2 个重复项创建一个数组,为 3 个重复项创建一个数组,为超过 3 个重复项创建一个数组
- 将每个生成的生日一个一个地添加到第一个数组中。但在这样做之前,请遍历数组以查看它是否已经存在。如果是这样,将其添加到第二个数组中,但在此之前重复上述过程,依此类推
- 虽然它似乎不是一个非常有效的算法:) 建议在这里改进 Big O?