1. 程式人生 > >[面試題][數學與概率]設計隨機數生成器

[面試題][數學與概率]設計隨機數生成器

假設你已經有一個隨機數生成器,能夠以概率p生成0,概率1-p生成1,請問如何設計演算法以概率q等概率地生成0-6這七個數字中的一個?即每個數字的概率均為q,q<1/7.

我們先從簡單的情況開始考慮,假設需要生成0和1,二者概率均為q。那麼我們可以讓已有的隨機數生成器產生兩個數字,那麼產生的數字及概率是:

Number Prob
00 p2
01 p(1p)
10 p(1p)
11 (1p)2

注意到01和10的概率是相等的,所以可以當得到01時輸出0,得到10時輸出1,並令p(1-p)=q, 可以求得p的值,顯然p有兩個關於1/2的對稱解,從直觀上來理解這也是必然的,因為0和1是對稱的。

這種解法可以推廣到n個數的情況,生成的00…001對應0,00…010對應1,00…100對應2,……,01…000對應n-1,10…000對應n。同樣令

pn1(1p)=q即可求得p的值。