【发布时间】:2016-02-08 10:50:25
【问题描述】:
我对著名的生日悖论做了一个小实现,第一次尝试找到两个随机生日(这里是 1 到 365 之间的整数)之间的冲突。 但它总是返回一个值,比如说 40 和 70,这根本不适合统计数据。 我的算法或随机 int 生成器有问题吗?感谢您的反馈。
代码如下:
public static void main(String[] args){
int[] birthday = new int[200];
for(int i = 0; i<20;i++){
Collision(birthday);
}
}
public static int Collision(int birthday[]){
Random rand = new Random();
for(int i = 1; i<birthday.length;i++){
birthday[i] = rand.nextInt(365);
}
int count = 0;
for(int i = 0; i<birthday.length; i++){
for(int j= i+1 ; j<birthday.length; j++){
if (birthday[i] == birthday[j]){
count++;
}
}
}
System.out.print(count+" ");
return count;
}
这是 ex 的输出:
45 50 60 52 53 53 50 49 37 68 52 53 51 43 49 51 46 43 45 35
【问题讨论】:
-
预期的平均输出是多少?
-
对于一组 200 人,40 到 70 之间的碰撞计数听起来很合理。
-
那么你期待什么?碰撞的几率几乎是 100%,你发现平均为 40。这与理论并不矛盾,请参阅birhtday problem calculator
-
感谢您的回复。根据理论,一组23人的概率是50%,我从来没有过……SP应该在某个地方有一些缺陷。我希望有时 25 或 15 甚至更少......
-
求和,预期值确实应该略高,在 84 左右。