这是我的问题。
假设你有一个这样的函数:(在c中)
int strangeRand() {
if ( rand() % 100 <= 70 ) return 0;
else return 1;
}
这个返回0的概率是0.7
和概率为0.3的1
我想做的是,创建一个函数,返回0的概率为0.5,返回1的概率也为0.5。
我只需要使用strangeRand()函数[不能修改它](和循环,如果等,但没有rand()函数)
有人知道怎么做吗?
谢谢。
最佳答案
这实际上是一个解决了的问题!它通常被称为获得fair result from an unfair coin。
算法的工作原理如下:
调用函数两次。
如果结果匹配,重新开始,忘记两个结果。
如果结果不同,使用第一个结果,忘记第二个。
提供的链接包含算法工作原理的解释。
关于algorithm - 非线性概率的线性概率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34051920/