等概率隨機數生成器

2021-08-23 12:17:49 字數 476 閱讀 4820

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

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

number

prob

00p2p2

01p(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。同樣令

**

隨機數生成器

標頭檔案 內容 rand,srand函式和rand max常量 rand max 在windows系統中為32767 在類unix系統中為2147483647 rand 函式返回乙個0 rand max的隨機整數 srand seed 函式 接受unsigned int 型別的引數seed,以see...

MATLAB隨機數生成器

1 rand 生成 0,1 區間上均勻分布的隨機數 基本語法 rand m,n,p 生成排列成m n p 多維向量的隨機數。如果只寫m,則生成m m矩陣 如果引數為 m,n 可以省略方括號。2 randn 生成服從標準正太分布 均值為0,方差為1 的隨機數 基本語法 randn m,n,p,解釋同1...

等概率生成器

假設生成0的概率是p,生成1的概率是1 p,則生成01和10的概率相等。隨機生成0 1 int rand z one 等概率生成0 1即概率為0.5 int newrand int n1 rand z one int n2 rand z one if n1 0 n2 1 return 1 if n1...