0/1不等概率随机-求->0/1等概率随机

这篇博客介绍了如何将一个不等概率的0/1随机生成转化为等概率的方法。首先通过c01()函数获取0(概率70%)或1(概率30%),然后使用c02()函数通过筛查机制,确保两次生成的结果不同,从而达到等概率的效果。在c02()中,如果连续两次相同,则重新生成,直到得到不同的结果。在c03()的测试中,经过一百万次迭代,验证了生成的0和1概率接近相等。

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

从一个不等概率,获得等概率

得到0/1的概率是不等的,得到0的概率是P,得到1的概率是(1-P) 求,如何得到等概率的0/1
带入实际数字的百分比,得到0的概率是70%,得到1的概率是30%,相加是100%

第一步

 private int c01() {
 //获得不等概率的随机0/1
    return Math.random() < 0.7 ? 0 : 1;
  }

第二步

 /**
 * 筛查2次c01(),如果两次一致,那就重新做,只有0,1或1,0才会返回
 *
 * @return 此时返回的是等概率0,1
 */
private int c02() {
  int c2;
  do {
    c2 = c01();
  } while (c2 == c01());
  return c2;
}

第三步

  /** 测试 */
  @Test
  public void c03() {
    int[] counts = new int[2];
    int num = 1000000;
    for (int i = 0; i < num; i++) {
      int t = c02();
      counts[t]++;
    }
    // 校验
    System.out.println(Arrays.toString(counts));
    System.out.println((double) counts[0] / (double) num);
    System.out.println((double) counts[1] / (double) num);
  }

心得:
对于不等概率,要先找到其中的等概率,
c01(),获得0是70%,获得1是30%,这是前提条件
c02()中,若第一次==第二次,说明是00或11,概率不能等于100%,只有第一次获得0第二次获得1; 或者第一次获得1,第二次获得0,两个概率想加100%,才能说明是概率一致的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值