非线性概率的线性概率

时间:2015-12-02 20:00:35

标签: algorithm probability

这是我的问题。

想象一下你有这样的功能:(这里是C)

int strangeRand() {
    if ( rand() % 100 <= 70 ) return 0;
    else return 1;
}

这一次返回0概率为0.7 和1的概率为0.3

这是我想要做的,创建一个函数,返回0的概率为0.5和1,概率为0.5。

我只需要使用strangeRand()函数[无法修改](和循环,如果是等但没有rand()函数)

有人知道了,怎么做?

感谢。

1 个答案:

答案 0 :(得分:4)

这实际上是一个已解决的问题!它通常被称为获得fair result from an unfair coin

该算法的工作原理如下:

  1. 调用该功能两次。
  2. 如果结果匹配,请重新开始,忘记两个结果。
  3. 如果结果不同,请使用第一个结果,忘记第二个结果。
  4. 提供的链接包含为什么算法有效的解释。