题目解答:
两次调用该RANDOM函数,如果其概率为P(x),调用2次
P(1) = p P(0) = 1-p
P’(1) =p P’(0) = 1-p
概率如下:
11 pp 10 p(1-p)
01 (1-p)p 00 (1-p)(1-p)
int random_0_1(){int i = RANDOM();int j = RANDOM();int result; while (true){if (i == 0 && j == 1){result = 0;break;}else if (i == 1 && j == 0){result = 1;break;}elsecontinue;} return result;原文:https://blog.csdn.net/alexingcool/article/details/7862009
2 引申
有一个函数fun能返回0和1两个值,返回0和1的概率都是1/2,问怎么利用这个函数得到另一个函数fun2,使fun2也只能返回0和1,且返回0的概率为0.3,返回1的概率为0.7。
0000~1111每个串出现的概率都为1/16
如果生成的串为0000 0001 0010之一,则返回0 【0 1 2 】
如果生成的串为0011 0100 0101 0110 0111 1000 1001则返回1(共七个串)【3 4 5 6 7 8 9】
扩展 生成1~ N 之间的数,每次返回1~N概率相等。
首先看2^n次方大于N 调用n次随机等概率函数(通过p(1-p))与(1-p)p 生成,如果n==数字多少 返回该数字。
思路
构建等概率函数,多次调用该函数。