d********t 发帖数: 9628 | 1 随机数产生器产生0,1两个数,80%是0,20%是1,为怎么样弄成50%的0和1 |
b******t 发帖数: 965 | 2 有一种random number generation的方法叫rejection
产生一个长度位2的序列
01 map为0
10 map为1
00或者11 reject
【在 d********t 的大作中提到】 : 随机数产生器产生0,1两个数,80%是0,20%是1,为怎么样弄成50%的0和1
|
d*********t 发帖数: 33 | 3 好主意
【在 b******t 的大作中提到】 : 有一种random number generation的方法叫rejection : 产生一个长度位2的序列 : 01 map为0 : 10 map为1 : 00或者11 reject
|
d********t 发帖数: 9628 | 4 good idea
【在 b******t 的大作中提到】 : 有一种random number generation的方法叫rejection : 产生一个长度位2的序列 : 01 map为0 : 10 map为1 : 00或者11 reject
|
B******5 发帖数: 4676 | |
b*****c 发帖数: 1103 | |
a**h 发帖数: 2150 | |
d*********t 发帖数: 33 | 8 貌似是一回事
【在 a**h 的大作中提到】 : 如果弄成60%的0和40%的1,咋整?
|
b*****c 发帖数: 1103 | 9 : 有一种random number generation的方法叫rejection
: 产生一个长度位2的序列
: 01 map为0
: 10 map为1
: 00或者11 reject
【在 a**h 的大作中提到】 : 如果弄成60%的0和40%的1,咋整?
|
a****h 发帖数: 126 | 10 已经面回来了?
【在 d********t 的大作中提到】 : 随机数产生器产生0,1两个数,80%是0,20%是1,为怎么样弄成50%的0和1
|
|
|
a**h 发帖数: 2150 | 11 为什么?01,10 出现的概率一样.而我要求出现6/4的比例
---------------
貌似是一回事
【在 a**h 的大作中提到】 : 如果弄成60%的0和40%的1,咋整?
|
s******n 发帖数: 3946 | 12 有了random(2),可以构造4位的random(16),然后丢弃10~16
【在 a**h 的大作中提到】 : 为什么?01,10 出现的概率一样.而我要求出现6/4的比例 : --------------- : 貌似是一回事
|
a**h 发帖数: 2150 | 13 初始问题中01,10出现概率完全一样.你这个解法前提是0-9出现的概率必须完全一样才
性,而生成0001和0011的概率肯定不一样,你从10个数字中按照6:4的比例挑肯定不行.
【在 s******n 的大作中提到】 : 有了random(2),可以构造4位的random(16),然后丢弃10~16
|
s******n 发帖数: 3946 | 14 int theRand() // 0 %80, 1 %20
int rand2() // 0 %50, 1 %50
{
while (true) {
int x = theRand();
int y = theRand();
if (x!=y) return (x);
}
}
int rand8() // 均匀分布0~7
{
return (rand2()<<2) | (rand2()<<1) | rand2();
}
int result() // %60 0 %40 1
{
while(true) {
int r = rand8();
if (r<5) {
if (r<3) return 0;
else return 1;
}
}
} |
a**h 发帖数: 2150 | 15 wow, good
【在 s******n 的大作中提到】 : int theRand() // 0 %80, 1 %20 : int rand2() // 0 %50, 1 %50 : { : while (true) { : int x = theRand(); : int y = theRand(); : if (x!=y) return (x); : } : } : int rand8() // 均匀分布0~7
|