2015-12-02 138 views
0

這裏是我的問題。非線性概率的線性概率

試想一下,你有一個這樣的功能:(這裏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()函數)

是有人有一個想法,如何做到這一點?

謝謝。

回答

4

這實際上是一個解決的問題!它通常被稱爲獲得fair result from an unfair coin

該算法的工作原理如下:

  1. 調用該函數的兩倍。
  2. 如果結果一致,重新開始,忘記兩個結果。
  3. 如果結果不同,請使用第一個結果,忘記第二個結果。

提供的鏈接包含對的解釋,爲什麼算法起作用。

+0

非常感謝!我想這就是我要找的東西:D(我會在七分鐘內接受你的答案,以前不能這樣做) – kaldoran

+0

http://pastebin.com/KUN5x5vU這裏是你說的和你的工作的退出實施非常好。再次感謝 – kaldoran

+0

@kaldoran - 對我也很好! https://ideone.com/2Cgnzz –