现在的位置: 首页 > 综合 > 正文

一随机数以概率 p 生成0,以概率 (1-p) 生成1,怎样生成等概率的 0 和 1 ?

2013年01月14日 ⁄ 综合 ⁄ 共 348字 ⁄ 字号 评论关闭

今天笔试题考到了,自己提的方法是N次调用,生成的0的个数与N相比,比值和p的大小比。。。

以前经常见这道题,从来没看过。。。今天网上搜了一下,网上解法模板略有错误,小改一下:

设f'(x)=f(x)>0?0:1;  则f'(x)以概率 1-p 生成0. 
所以f(x),f'(x)同时生成0的概率为p(1-p),同时生成1的概率也为p(1-p). 
得等概率随机数 

function g(x)
{ 
	int v = f(x) + f(x)>0?0:1; 
	if(v==0)
	{ 
		return 0;  //1.f(x),f'(x)同时为0 
	}
	else if(v==2)
	{ 
		return 1;  //2.f(x),f'(x)同时为1 
	}
	else
	{ 
		g(x);  //3.f(x),f'(x)一个为0一个为1,重新生成随机数 
	} 
} 

上面第3步的概率为p^2+(1-p)^2

抱歉!评论已关闭.