已知一随机发生器,产生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:http://blog.youkuaiyun.com/v_july_v/article/details/6870251
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, ...