1.假設我有個生成器,生成0的概率為p,生成1的概率為q,如何通過此發生器獲得乙個均為1/2的生成器呢?
【答】思路:尋找兩個等概率事件。易知連續投擲兩次獲得01或者10的概率均為p(1-p) =y,因此如果我們連續生成兩個數,如果獲得00或者11概率為u=p^2+(1-p)^2,則繼續再獲取兩個數,直到獲取到10或者01為止。概率為(1+u+u^2+u^3+...)*y 求極限為y*(1/(1-u))=0.5
因此 我們得到了想要的,我們可以認為最終得到10的為事件0,最終得到01的為事件1,這樣子就達到目的了。
2.假設我有乙個隨機數生成器範圍為 如何獲得乙個等概率的生成器
【答】思路:同樣採取上題的思路構造兩個等概率事件:事件a: 不停生成數 直至生成的數a<3 事件b 不停生成數直至生成數a>3 同樣可以證明這個兩個事件發生概率都是0.5
3. 假設我有乙個隨機數生成器範圍為 如何獲得乙個的等概率隨機生成器
【答】思路:
(1)首先我們獲得乙個等概率生成器
(2)我們獲得乙個***的隨機二進位制序列表示範圍(0,1,2,...,2^k-1)。其中2^(k-1)<=n<2^k
(3)定義n個事件 其中m事件為:如果***屬於則再生成乙個***的隨機序列屬於 其中***=m的概率為1/n
擴充套件解法:已 知一隨機發生器,產生0的概率是p,產生1的概率是1-p,現在要你構造乙個發生器,使得它構造0和1的概率均為1/2;構造乙個發生器,使得它構造1、 2、3的概率均為1/3;...,構造乙個發生器,使得它構造1、2、3、...n的概率均為1/n,要求複雜度最低。
首先是1/2的情況,我們一次性生成兩個數值,如果是00或者11丟棄,否則留下,01為1,10為0,他們的概率都是p*(1-p)是相等的,所以等概率了。
然 後是1/n的情況了,我們以5為例,此時我們取x=2,因為c(2x,x)=c(4,2)=6是比5大的最小的x,此時我們就是一次性生成4位二進位制,把 1出現個數不是2的都丟棄,這時候剩下六個:0011,0101,0110,1001,1010,1100,取最小的5個,即丟棄1100,那麼我們對於 前5個分別編號1到5,這時候他們的概率都是p*p*(1-p)*(1-p)相等了。
關鍵是找那個最小的x,使得c(2x,x)>=n這樣能提公升查詢效率
ps:c(2x,x)的意思是生成2x位的二進位制數,其中x位為1,x位為0,那麼這樣的數的概率都為p^x * (1-p)^x,在這樣的數種取最小的前n個數即可.....
等概率生成器
假設生成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...
等概率隨機數生成器
題目 假設你已經有乙個隨機數生成器,能夠以概率p生成0,概率1 p生成1,請問如何設計演算法以概率q等概率地生成0 6這七個數字中的乙個?即每個數字的概率均為q,q 1 7.我們先從簡單的情況開始考慮,假設需要生成0和1,二者概率均為q。那麼我們可以讓已有的隨機數生成器產生兩個數字,那麼產生的數字及...
面試題 等概率生成器
問題一 已知一隨機發生器,產生0的概率是p,產生1的概率是1 p,現在要你構造乙個發生器,使得它構造0和1的概率均為1 2 構造乙個發生器,使得它構造1 2 3的概率均為1 3 構造乙個發生器,使得它構造1 2 3 n的概率均為1 n,要求複雜度最低。解決方法 原始的隨機數生成器,生成0 的概率為p...