等概率生成器

2021-06-13 18:20:32 字數 530 閱讀 6752

假設生成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==1&&n2==0)

return 0;

return newrand();

等概率生成1.。。。n

解法:求出n的二進位制表示位數 k;

int nnewrand()

int result = 0;

for(int i = 0;iif(newrand()==1)

result=result|1n)

return nnewrand();

return result+1;

等概率隨機數生成器

題目 假設你已經有乙個隨機數生成器,能夠以概率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...

概率生成器 演算法

1.假設我有個生成器,生成0的概率為p,生成1的概率為q,如何通過此發生器獲得乙個均為1 2的生成器呢?答 思路 尋找兩個等概率事件。易知連續投擲兩次獲得01或者10的概率均為p 1 p y,因此如果我們連續生成兩個數,如果獲得00或者11概率為u p 2 1 p 2,則繼續再獲取兩個數,直到獲取到...