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

2021-08-19 05:20:52 字數 677 閱讀 7526

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

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

number

prob00p

2 p

201p

(1−p

) p(1

−p

)10p

(1−p

) p(1

−p

)11(

1−p)

2 (1−

p)

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。同樣令pn

−1(1

−p)=

q pn−

1(1−

p)=q

即可求得p的值。

參考文獻:

隨機數相關面試題

1 給你乙個陣列,設計乙個既高效又公平的方法隨機打亂這個陣列 此題和洗牌演算法的思想一致 方法比較簡單,基本思想是每次隨機取乙個數,然後把它交換到最後的位置。然後對前 n 1 個數使用遞迴的演算法。遞迴實現 void suffle int a,int n 非遞迴實現 void suffle int ...

隨機數相關面試題

1 給你乙個陣列,設計乙個既高效又公平的方法隨機打亂這個陣列 此題和洗牌演算法的思想一致 方法比較簡單,基本思想是每次隨機取乙個數,然後把它交換到最後的位置。然後對前 n 1 個數使用遞迴的演算法。遞迴實現 void suffle int a,int n 非遞迴實現 void suffle int ...

一道面試題 等概率隨機數

假設有兩個函式 rand3 可以產生隨機的0 1 2,rand5 可以產生隨機的0 1 2 3 4,現在請你利用它編寫乙個函式rand7 產生0 6的隨機數。int rand7 int row,col do while a row col 6 return a row col int rand7 w...