一随机数以概率 p 生成0,以概率(1-p)生成1,怎样生成等概率的 0 和 1
这涉及到概率 分布的内容了,其实也简单只要能找到一个概率为1/2p的函数就解决了.
另外还有一个比较方便的实现:
一随机数f(x)以概率 p 生成0,
那么设g(x)=f(x)>0?0:1; 刚g(x)以概率 1-p 生成0.
所以f(x),g(x)同时生成0的概率为p(1-p)等于同时生成1的概率.
得等概率随机数
function g(x){
int v=f(x)+g(x);
if(v==0){
return 0; //1.f(x)g(x)同时为0
else if(v==2){
return 1; //2.f(x)g(x)同时为1
}else{
g(x); //3.f(x)g(x)一个为0一个为1,重新生成随机数
}
}
上面第3步的概率为p^2+(1-p)^2