随机数生成算法的问题

duanmaotao1 2014-04-17 04:58:04
问题是这样的,已知一个随机数产生函数rand(),其可以产生0-----m-1之间的随机数,且其每个数产生的概率相等。问题是如何通过该随机数产生函数,构造一个产生函数,能够产生0-----------n-1范文内的随机数,且各个数的产生的概率大小相等。。。。。。。希望大神告诉个能够在线性时间内的该随机数产生函数算法。。。且最坏情况不会无限的循环下去。。
...全文
332 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovepqqq 2014-04-30
  • 打赏
  • 举报
回复
编程珠玑上有专门讲的
独孤过儿 2014-04-23
  • 打赏
  • 举报
回复
我想到个方法,未必正确,暂时先占个楼层 假如要生成的数字 n-1 最长为 d 位,那么就构造一个 d 位的整数。构造规则是: 从低位向高位按位构造(或者反向,这个不重要)。 循环调用 rand(),如果返回值为奇数,则对应的位为1;偶数则为0. 循环结束后,计算出这 d 位数字的值。
BeanJoy 2014-04-23
  • 打赏
  • 举报
回复
引用 3 楼 fetag 的回复:
我想到个方法,未必正确,暂时先占个楼层 假如要生成的数字 n-1 最长为 d 位,那么就构造一个 d 位的整数。构造规则是: 从低位向高位按位构造(或者反向,这个不重要)。 循环调用 rand(),如果返回值为奇数,则对应的位为1;偶数则为0. 循环结束后,计算出这 d 位数字的值。
方法好,但要注意两点: 1.最长为d位,应该是二进制的最长位数; 2.“如果返回值为奇数,则对应的位为1;偶数则为0”不能保证概率平均,比如rand()可得0,1,2,则偶数的概率比奇数大,这里还需要用到m,保证得0或得1的概率一样。
BeanJoy 2014-04-23
  • 打赏
  • 举报
回复
引用 2 楼 duanmaotao1 的回复:
2楼显然是不对的。。
m>=n: rand()*n/m m<n: rand()*rand()*...*rand()*n/m^x (其中rand()*rand()*...*rand()为x个rand()相乘,m^x表示为m的x次方,要保证m^x不小于n); 另外,方法是可行的,但到底是m^x还是(m-1)^x,请楼主自行研究。
赵4老师 2014-04-23
  • 打赏
  • 举报
回复
用m进制数表示n进制数会吗?
独孤过儿 2014-04-23
  • 打赏
  • 举报
回复
引用 6 楼 BeanJoy 的回复:
方法好,但要注意两点: 2.“如果返回值为奇数,则对应的位为1;偶数则为0”不能保证概率平均,比如rand()可得0,1,2,则偶数的概率比奇数大,这里还需要用到m,保证得0或得1的概率一样。
其实这个问题昨晚回复的时候我就想到了,只是当时未想到解决方案,现在有了。 如果m-1为奇数的话,那就是生成的奇偶概率不一样。针对这种情况,可以采取运行两次rand()来确定一个位。两次rand()的组合, 有四种,分别是 00, 01, 10, 11。这四种cases的生成概率肯定不一样。但是 01 和 10 生成的概率一定相同,因为这是一奇一偶的组合。生成01的时候,位是0;生成10的时候,位是1.这样问题就解决了。
duanmaotao1 2014-04-22
  • 打赏
  • 举报
回复
2楼显然是不对的。。
BeanJoy 2014-04-17
  • 打赏
  • 举报
回复
rand()*n/m
随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数生成算法随机数

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧