有这样一个面试题,“在某些地方,人们喜欢女孩多过男孩。夫妻一旦有了女孩,就不会考虑生二胎。相反,如果第一个孩子不是女孩,他们将要生第二个孩子……直到生女孩。假设生女孩的概率是 50%,那么女孩和男孩的比例是多少。”
从几何分布来看,比例为1:1。
我想在 Java 中模拟比率。这是我的代码,
package art.programming.algorithm;
import java.util.Random;
public class Probability {
private int numOfGirls = 0;
private int numOfBoys = 0;
private void random(){
if (new Random().nextInt(1000000) >= 500000){
numOfGirls = numOfGirls + 1;
return;
}
numOfBoys = numOfBoys + 1;
random();
}
public static void main(String... args){
Probability p = new Probability();
for (int j=0; j<100; j++){
System.out.println( j + " test");
for (int i=0; i<10000000; i++){
p.random();
}
System.out.println("Boys " + p.numOfBoys);
System.out.println("Girls " + p.numOfGirls);
p.numOfBoys=0;
p.numOfGirls=0;
}
}
}
然而,结果表明男孩的数量总是大于女孩的数量。从这些帖子中,为什么随机不那么随机?和http://engineering.mit.edu/live/news/1753-can-a-computer-generate-a-truly-random-number,我猜如果没有特定的硬件支持,就无法生成真正的随机性。结果,无法模拟几何分布?我想知道是否有办法提高随机性,使男孩与女孩的比例有时为 10030100:10000000,有时为 9999100:10000000。
编辑:将新的 Random() 从随机方法中取出后,我得到了预期的结果。