算法-等概率构造器

博客围绕给定返回0和1概率为p和1 - p的函数,探讨如何实现返回0、1概率相等。分析了00、01、10、11四种组合的概率,发现01和10概率相等。还给出Java中用Random函数实现的思路,并扩展到构造产生1到n概率均为1/n的发生器的解答。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给一个函数,返回0和1,概率为p和1-p,请你实现一个函数,使得返回0、1的概率一样

分析:

00 —>概率为p*p

01 —>概率为p*(1-p)

10 —>概率为(1-p)*p

11 —>概率为(1-p)*(1-p)

四种情况中我们发现 01和10的两种组合返回的概率都是p*(1-p),那么我们可以认为这两种情况下返回0和返回1的概率是相等的。

接下来就是要想办法使得00和11两种组合返回的概率相等。在Java中我们可以使用Random函数来产生随机数,再使用组合的方法保证概率一样

import java.util.Random;

public class Demo4 {

    public static void main(String[] args) {

        while (true) {
            System.out.println(random());
        }

    }

    public static int random() {
        Random r = new Random();

        int i = r.nextInt(2);
        int j = r.nextInt(2);
        int result;

        while (true) {
            if (i == 0 && j == 1) {
                result = 0;
                break;
            } else if (i == 1 && j == 0) {
                result = 1;
                break;
            } else {
                i = r.nextInt(2);
                j = r.nextInt(2);
            }

        }
        return result;
    }

}

扩展一下:

已知一随机发生器,产生0的概率是p,产生1的概率是1-p,现在要你构造一个发生器,

使得它构造0和1的概率均为1/2;构造一个发生器,使得它构造1、2、3的概率均为1/3;…,

构造一个发生器,使得它构造1、2、3、…n的概率均为1/n,要求复杂度最低。

解答:

对n=2,认为01表示0、10表示1,等概率,其他情况放弃

对n=3,认为001表示1、010表示2,100表示3,等概率,其他情况放弃

对n=4,认为0001表示1、0010表示2,0100表示3,1000表示4,等概率,其他情况放弃

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值