0-1等概率问题
问题描述
- 一个随机数产生器以概率P生成0,以概率(1-P)生成1,怎样生成等概率的0和1?
主要思路
- 如果用这个产生器产生两个位,出现00的概率为P^2,出现01的概率为P(1-P),出现10的概率为P(1-P),而出现11的概率为(1-P)^2。故而可以用10表示1,01表示0,从而保证生成0和1的概率是相同的。
代码实现
int generate01(int (*func)()) {
if (func == NULL)
return -1;
int num1 = -1;
int num2 = -1;
int ret = -1;
while(num1 != num2){
num1 = func();
num2 = func();
if (num1 == 1 && num2 == 0) {
ret = 1;
break;
} else if (num1 == 0 && num2 == 1) {
ret = 0;
break;
}
}
return ret;
}
0-1问题扩展
- 利用这个随机数生成器,等概率的生成1,2,……,n

本文探讨了如何使用概率算法生成等概率的0和1,以及如何扩展到生成0-1之间的随机数。介绍了蓄水池算法在生成不重复随机数中的应用,解决了在给定范围内生成随机数和随机选取关键字的问题。还涉及了在半径为1的圆中随机选取点的方法。
最低0.47元/天 解锁文章
467

被折叠的 条评论
为什么被折叠?



