问题

从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次
最后修改:2024 年 01 月 25 日
如果觉得我的文章对你有用,请随意赞赏