假設生成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,則繼續再獲取兩個數,直到獲取到...