问题
从0、1不等概率随机到0、1等概率随机:即给定一个方法f,该方法能够不等概率的返回0和1,要求不用其他随机方法只能用f方法,使得等概率返0和1
解答
解题思路
由于f方法返回0的概率加上返回1的概率一定会1,这个时候可以定义一个方法f2,该方法内部调用分别两次f方法,,假设两次拿到的结果分别是x和y,如果x=0,y=1,则f2方法返回0;如果x=1,y=0,则f2方法返回1;否则重新调用f方法。
代码示例
public class RandomDifferentToSame {
public static int f() {
return Math.random() < 0.85 ? 0 : 1;
}
public static int f2() {
int num1 = f();
int num2 = f();
while (num1 == num2) {
num1 = f();
num2 = f();
}
return num1 == 0 && num2 == 1 ? 0 : 1;
}
public static void main(String[] args) {
int maxTimes = 10000000;
int[] arr = new int[2];
for (int i = 0; i < maxTimes; i++) {
int num = f2();
arr[num]++;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(i + "出现了" + arr[i] + "次");
}
}
}
运行结果为
0出现了5000744次
1出现了4999256次