【发布时间】:2013-08-13 10:56:19
【问题描述】:
有一个面试题如下, “有些地方,人们喜欢女孩多过男孩。夫妻一旦有了女孩,就不会考虑生二胎。相反,如果第一个孩子不是女孩,他们就会生二胎。”孩子……直到他们有了女孩。假设生女孩的概率是 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;
}
}
}
但是,结果表明男孩的数量总是大于女孩的数量。从这些帖子Why is random not so random? 和http://engineering.mit.edu/live/news/1753-can-a-computer-generate-a-truly-random-number,我猜想如果没有特定的硬件支持,就无法生成真正的随机性。结果,无法模拟几何分布? 我想知道是否有办法提高随机性,使男孩与女孩的比例有时为 10030100 : 10000000,有时为 9999100 : 10000000。
编辑:将新的 Random() 从随机方法中取出后,我得到了预期的结果。
【问题讨论】:
-
你的意思是
simulate? -
对于 99% 的应用程序,来自 java 的随机数可以被认为是真正随机的。你不需要真正的随机数
-
enter code here表明这是家庭作业。是吗? -
@Gunslinger or sb 谁是新人
-
我得到了预期的行为。除此之外,您可以通过在每次调用时不创建新的
Random来很多加速代码。
标签: java random probability