84. 用不平均概率构造平均概率

本文介绍了一种通过已知偏置随机数生成器构造均匀分布随机数的方法。利用多次调用发生器产生的二进制串,通过特定组合映射到目标集合中,实现了任意数量的等概率事件模拟。

已知一随机发生器,产生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, ...


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值