等概率随机函数

昨天在做练习题的时候,看到了一道设计等概率随机函数的练习题,突然想到了之前看到过的问题,故仔细求解。


问题如下:

现有一个等概率随机函数f5,返回1~5这5个自然数随机一个数,需要用f5来构造f7,返回1~7这7个自然数的随机一个数,请问f7该如何构造?


我灵光一现,这个简单啊,f5+f5%3,OK。但是仔细想想,好像不对,f5%3中,0的概率是1/5,1和2的概率是2/5,所以整个算法产生6和7的概率,要高于产生5的概率。

仔细想了想,等概率,是不是意味着,如果我有30个数,等概率取出来,那么我只要从这30个数中能够让他取到1~7的时候返回,其余时候重新去取,不就可以了?而取1~7,是不是也就意味着取到1~21,我用这个结果%7+1就可以了,所以算法如下:

while(x < 21) {

x = 5 * (f5 - 1) + f5

}

return 1 + x%7;

取1到25个自然数等概率,然后大于21的舍弃重新去取,最后的结果模7加1,搞定。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭三亿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值