已知一隨機發生器,產生0 的概率是p,產生1 的概率是1-p,現在要你構造乙個發生器,使得它構造0 和1 的概率均為1/2;構造乙個發生器,使得它構造1、2、3 的概率均為1/3;...,構造乙個發生器,使得它構造1、2、3、...n 的概率均為1/n,要求複雜度最低。
handwriting:
產生0 的概率是p,產生1 的概率是1-p
1、那麼01,10的概率是一樣的,使用2次隨機發生器,出現01認為是0,出現10認為是1,其他捨棄
2、使用3次隨機發生器,分3份,100和011, 010和101, 001和110其他捨棄
3、使用n次隨機發生器,
分n份,第 i 位為0其他為1,或者第 i 位為1其他為0的情況認為是 i;這種想法感覺有點浪費,如果使用k個隨機發生器,其中k/2位為1,其他為0的數保留,其他丟棄,然後將這些數對應於1~n,沒有驗證過,不知對錯。
answer
from:
run rand() twice, we got 00, 01, 10 or 11. if it』s 00 or 11, discard it, else output 0 for 01, 1 for 10.
similarly, assume c(m, 2) >= n and c(m-1, 2) < n. do m rand()』s and get a binary string of m length. assign 1100...0 to 1, 1010...0 to 2, ...