算法:1-5均匀的随机数,生成1-7的均匀随机数

            首先,大家对概率要有一定的了解,个人觉得程序员不搞点数学,就像walking dead 中的ghost,一点灵魂都没有。 给定 了1--5的随机数,且是均匀分布的。要扩展成1--7的均匀分布的随机数。不要用乘法或者除法,这样就不均匀了。思路就是用加法。在1--5随机数都加上一个数,然后这个范围也是均匀的。但不要异想天开说是在1--5随机数上+2就可以了,那只是生成了3--7之间的均匀分布。那就说说我的想法吧。总体想法是+,不用乘和除。

         分别计算出1--5与1--7共有多少个间隔,就是说1--2这间为一个 间隔,那么的话1--5有4个间隔,1--7有6个间隔。 然后求出4与6的最小公倍数(注:至于用程序实现,自己想想就知道了)。4与6的最小公倍数为12. 

         接下来就是在1--5的随机数,记作A1;然后接着在1--5之间生成一个随机数,加上一个4(注:4是指的是1--5的空格数)记作A2,这样的话就生成了一个5--9的均匀的随机数;再生成一个1--5的随机数,然后+8,记作A3,这样生成了9--13的均匀 随机数。          
 上面为什么要求最小公倍数,就是让1--13之间的间隔为12.
       然后生成了3种随机 数,假设为A1:1<=A1<5
                                                          A2:    5<=A2<9
                                                         A3:     9<=A3<13
比较 A1,与A2-4与A3-8的大小,按大小排序,假设最大的是A2-4,那么的话A2作为要选取的数,如果是A1,那么A1为选取的数据,如果是A3-8,那么A3为选取的数。
       现在就有两种情况了,假设选中的数为B(B∈(A1,A2,A3))。
一种是1<=B<=7,那么直接输出B为随机数。
另一种是B>7,那么输出B-6为随机数。解决了所有问题。
    这可以用数学理论证明是生成的数是均匀分布的。
     证明我只提一点,1--5是均匀分布,5--9是均匀分布,9--13是均匀分布,现在问题来了,怎么让1--13也是均匀分布呢?这里面用的技巧是比较这间隔之间数据的大小。1--5与5--9与9--13之间是独立同分布的,那么的话就有理由认为1--5与(5--9)-4与(9--13)-8的数成为最大数的概率都是是1/3.那么就可以说是1/3的概率选取了1--5,1/3的概率选取了5--9,同样1/3选取了9--13的数。那样的话1--13就是均匀分布了。把1--13变成两个间隔,1--7和7--13,然而1--7是均匀分布,而且7--13也是均匀分布。那么的话(7--13)-6也是均匀分布,这不就是1--7的均匀分布吗?
       程序就不写了,这几天都写成了腰间盘突出,就差点吐血了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值