诸神之终焉吧 关注:8贴子:341
  • 3回复贴,共1

随机数生成器问题

只看楼主收藏回复

问题:
目前有一种可以以概率P生成0、以概率(1-P)生成1的随机数生成器,那么要怎样获得一个生成0、1概率各1/2的随机数生成器?


IP属地:广东1楼2012-08-29 20:00回复
    我们设置2个题目中给定的随机数生成器A、B,做如下循环:
    do{
    a=A(); //生成第一个随机数
    b=B(); //生成第二个随机数
    if(ab==01){ //即a=0且b=1,下面同理
    out=0;
    break;
    }
    if(ab==10){
    out=1;
    break;
    }
    }while(ture);
    主要思想就是将输出的1和0分别编码为等概率出现的10和01两种组合[概率均为P(1-P)],如果是其他两种组合则再次重复操作。
    


    IP属地:广东2楼2012-08-29 20:09
    回复
      扩展1:如何利用问题中给的随机生成器构造一个等概率生成1~n的随机数生成器?
      思路:还是将1~n的数字编码,但要保证编码中的0和1的个数是相同的。设这样需要2k个随机生成器,则需满足

      PS:也可以用题目给的生成器构造出0、1概率各1/2的随机数生成器,将1~n转化为其对应的2进制数字作为编码。但这样需要的生成器数目会更多。
      


      IP属地:广东3楼2012-08-29 20:18
      回复
        扩展2:如何利用等概率生成1~5的随机生成器构造一个等概率生成1~7的随机数生成器?
        思路:用1~5的随机生成器构造一个等概率0-1生成器(比如随机出1,2输出0;随机出3,4输出1;随机出5则再次重复生成一次),将1~7转化为000~111的2进制数字作为编码。
        PS:也可以用1~5的随机生成器构造出题目中那样的非等概率0-1生成器,将扩展2的问题转化为扩展1的问题
        


        IP属地:广东4楼2012-08-29 20:27
        回复