一个01发生器,产生0和1不均匀,怎么设计使得它产生均匀的01序列

1.有一个随机数发生器,能以概率p生成0,以概率1-p生成1,问如何做一个随机数发生器
使得生成0和1的概率相等。
2.用上面那个生成0和1的概率相等的随机数发生器,怎样做一个随机数发生器使得它生成
的数在1…N之间均匀分布。

第一题比较简单,可以用原发生器周期性地产生2个数,直到生成01或者10。
由于生成01和10的概率均为p(1-p),故预先任意指定01为0(或1),10为1(或0)即可。即可等概率的产生0和1。
[cpp] view plaincopyprint?
int Rand()
{
int i1 = rand();
int i2 = rand();
if(i1==0 && i2==1)
return 1;
else if(i1==1 && i2==0)
return 0;
else
return Rand();
return -1;
}

第二题,需要一些思考……想到位运算,因为i个二进制位随机的选择0或1,可以随机的构成0~2^i的数,而这些数构成了所有的组合数。因此是等概率出现的。比如:2位二进制位,这两位可以随机为0或1而互不影响,随机的构成了00 01 10 11,它们代表了四个数,且这四个数是等概率的。
[cpp] view plaincopyprint?
int newRand()
{
int result = 0;
for(int i = 0 ; i < k ; ++i)
{
if(Rand() == 1)
result |= (1<

你可能感兴趣的:(算法,JAVA编码)