算法刷题-等待率输出0和1

等概率输出0和1

题目描述:

有一个随机数发生器,以概率 P 产生0,概率 (1-P) 产生 1,请问能否利用这个随机数发生器,构造出新的发生器,以 1/2 的概率产生 0 和 1 。请写明结论及推理过程。

解题思路:

概率如下:
P ( 1 , 1 ) = p ∗ p 
P ( 1 , 0 ) = p ∗ ( 1 − p ) 
P ( 0 , 1 ) = ( 1 − p ) ∗ p 
P ( 0 , 0 ) = ( 1 − p ) ∗ ( 1 − p )

由此可以推出P ( 1 , 0 )和P ( 0 , 1 )概率相等,所以可以利用两次产生0或1的调用,产生概率相等的数。

代码:

package exercises

import (
    "math/rand"
    "time"
)

func x() int {
    // 假设
    // 1.返回0概率为p
    // 2.返回1概率为1-p
    rand.Seed(time.Now().UnixNano())
    return int(rand.Int31n(2))
}

func y() int {
    for {
        a := x()
        b := x()
        if a == 0 && b == 1 {
            return 0
        }
        if a == 1 && b == 0 {
            return 1
        }
        continue
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 从一副52张扑克牌中随机抽两种,颜色相等的概率 C(4,1)*C(13,2)/C(52,2) 2 54张牌,分...
    DaiMorph阅读 982评论 0 0
  • 1 从一副52张扑克牌中随机抽两种,颜色相等的概率 C(4,1)*C(13,2)/C(52,2) 2 54张牌,分...
    DaiMorph阅读 7,467评论 0 3
  • 概述 特点 不要求算法对所有可能的输入均正确计算 只要求出现错误的可能性小到可以忽略的程度 不要求对同一输入,算法...
    Aniwer阅读 369评论 0 0
  • 一. 几何 1. 在半径为1的圆中随机选取一点 方法1: 在x轴[-1,1],y轴[-1,1]的正方形随机选取一点...
    木子十千阅读 4,426评论 0 2
  • 1.初等数论 算术基本定理:任何一个大于1的自然数N,如果N不为质数,都可以唯一分解成有限个质数的乘积:关于任意两...
    王侦阅读 1,126评论 0 1