【概率】由已有的随机生成器构造出新的随机生成器

题目1:现有随机生成器rand3(),可以产生0~2这三个整数中的随机一个。你能构造出一个新的随机生成器rand88(),让它产生0~87之间的随机数吗?

思路:

1,randN()若能产生1~N之间的随机数,那么用两次randN()就能产生1~N^2之间的随机数,第一个随机数用来决定大的区域是哪一块,第二个随机用来决定选定大区域后里面的小区域选择哪一块。同理也能产生1~N^3, 1~N^4, ... 1~N^m等等之间的随机数。2,randN()若能产生1~N之间的随机数,那么通过范围舍弃,能产生1~M(M<N)之间的随机数, 原理是若产生的随机数超过M就舍弃继续调用randN(). 这会涉及到一个命中率的问题,因为每次超过范围了就必须再次调用,有不确定性。                                              3,randN()若能产生1~N之间的随机数,且N=kM(即N时M的整数倍),那么通过取模可以产生1~M之间的随机数,即randN()%M+1.

根据以上三条,便可以由已知的随机生成器构造出任何新的随机生成器。

 

题目2:现有随机生成器rand(),有0.3的概率产生0,   0.7的概率产生1。你能构造出一个新的随机生成器rand2(),让它等概率产生0和1吗?

思路:

用两次rand(), 两次的结果有 00, 01, 10, 11这四种,其中 01 和 10 的出现概率是相同的(0.21).剩余过程略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值