问题描述
现在有一个随机数发生器rand(),1/3概率产生1,2/3概率产生0,那么怎么利用他来产生一个1/2概率产生1,1/2产生0的随机数发生器呢?
提示
连续产生两个数试试。
解决方案
连续产生两个数
- 如果是(1, 1),概率是1/9
- 如果是(0, 0),概率是4/9
- 如果是(0, 1),概率是2/9
- 如果是(1, 0),概率是2/9
因此:
连续产生两个数,如果是(1,1)或者是(0,0)就丢掉结果,如果是(0,1),就返回1,如果是(1,0)就返回0。
现在有一个随机数发生器rand(),1/3概率产生1,2/3概率产生0,那么怎么利用他来产生一个1/2概率产生1,1/2产生0的随机数发生器呢?
连续产生两个数试试。
连续产生两个数
因此:
连续产生两个数,如果是(1,1)或者是(0,0)就丢掉结果,如果是(0,1),就返回1,如果是(1,0)就返回0。