随机数产生转换-根据(1,5)随机数生成器,生成(1,7)之内的随机数
2016-03-31 11:44
387 查看
原文:/article/5133492.html
1. 题目
给定一个随机数生成器,这个生成器能均匀生成1到5(1,5)的随机数,如何使用这个生成器生成均匀分布的1到7(1,7)的数?
2. 思路
方法一:生成两个(1,5)的随机数,这样一共是25种情况,注意这两个数是有顺序的,从这25种情况中,取前21种,每三种代表(1,7)中的一个数字,如果取到的是这21种以外的情况,丢掉重新取。
方法二:生成三个(1,5)的随机数,分别表示一个二进制位,其中1和2映射为0,3跳过,4和5映射为1。这样产生的三位二进制数,即1-8这8个数字都是等概率的。如果产生的是8,那么丢弃即可。
方法三:生成两个(1,5)的随机数,产生一个两位的五进制数,5 * (random5() – 1) + random5()。这个公式能够等概率产生1-25,即第一个随机数代表:0,5,10,15,20,地位代表1,2,3,4,5。这样对这个数字(1-25的数字),采用方法一的方法,只用1-21,分7分,代表1-7,22-25这4个数字扔掉。
3. 参考
根据(1,5)随机数生成器,生成(1,7)之内的随机数
[编程之美]随机数范围扩展方法总结
1. 题目
给定一个随机数生成器,这个生成器能均匀生成1到5(1,5)的随机数,如何使用这个生成器生成均匀分布的1到7(1,7)的数?
2. 思路
方法一:生成两个(1,5)的随机数,这样一共是25种情况,注意这两个数是有顺序的,从这25种情况中,取前21种,每三种代表(1,7)中的一个数字,如果取到的是这21种以外的情况,丢掉重新取。
方法二:生成三个(1,5)的随机数,分别表示一个二进制位,其中1和2映射为0,3跳过,4和5映射为1。这样产生的三位二进制数,即1-8这8个数字都是等概率的。如果产生的是8,那么丢弃即可。
方法三:生成两个(1,5)的随机数,产生一个两位的五进制数,5 * (random5() – 1) + random5()。这个公式能够等概率产生1-25,即第一个随机数代表:0,5,10,15,20,地位代表1,2,3,4,5。这样对这个数字(1-25的数字),采用方法一的方法,只用1-21,分7分,代表1-7,22-25这4个数字扔掉。
3. 参考
根据(1,5)随机数生成器,生成(1,7)之内的随机数
[编程之美]随机数范围扩展方法总结
相关文章推荐
- Ubuntu 安装PIXMA IP1180打印机
- __VA_ARGS__与逗号操作符的巧妙结合
- Armitage主屏幕说明与命令行启动
- 整理出来四旋翼飞行器的资料汇总
- Tiny4412 led之NDK JNI实现
- sdk和api的区别
- leetcode 224. Basic Calculator
- 如何处理11gR2 RAC下oc4j和gsd服务为OFFLINE状态
- 一些细节错误
- JSONObject与JSONArray的使用
- 欢迎使用CSDN-markdown编辑器
- HDU 5122 K.Bro Sorting(单调栈)
- 《Hadoop基础教程》之初识Hadoop
- lightoj 1170 - Counting Perfect BST 数学+DP
- 单例模式
- 饿了么java面试题(三轮面试亲身经历总结)
- 北京Uber优步司机奖励政策(3月31日)
- Web Storage API : LocalStroage
- js中数组Array的操作
- iOS动态修复App线上Bug 之 JSPatch