利用随机数生成器生成固定概率生成器
生活随笔
收集整理的這篇文章主要介紹了
利用随机数生成器生成固定概率生成器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一個有趣的題目:假設現有一隨機數生成器可以產生一個一位數:0 or 1, 產生 0 的概率為 ppp, 產生1的概率為 1?p1-p1?p ,試調用此隨機數生成器,寫出一個新隨機數生成器產生概率為1/n1/n1/n的n個事件。
此題可從概率論的角度思考,每次試驗(即隨機數生成器產生一個數)產生事件0的概率為ppp, 產生事件1的概率為1?p1-p1?p, 因為試驗本身是相互獨立的,故可以采用N重伯努利概型:
Cn0pn+Cn1pn?1p?11+Cn2pn?2p?12+...+Cnnp?1nC_n^0p^n+C_n^1p^{n-1}p-1^1+C_n^2p^{n-2}p-1^2 + ... + C_n^np-1^n Cn0?pn+Cn1?pn?1p?11+Cn2?pn?2p?12+...+Cnn?p?1n
可以發現Cn1pn?1p?11C_n^1p^{n-1}p-1^1Cn1?pn?1p?11共有n個(p?1)pn?1(p-1)p^{n-1}(p?1)pn?1這n個相同事件發生的概率相同,就可以取出這個事件做隨機數生成器,其余事件全部丟棄。在實際程序中,就是通過循環產生n個1bit的數,將其存入一個數組中,如果該數存在多個1則丟棄,全為0丟棄,這樣就可以實現了。
總結
以上是生活随笔為你收集整理的利用随机数生成器生成固定概率生成器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MBTI人格测试
- 下一篇: java自定义编号生成(支持前缀自定义)