社区
数据结构与算法
帖子详情
一个有关随机整数的问题
shamrock19
2008-11-04 02:53:39
今天碰到一个问题:如果rand8()得到的是均匀分布的0~7的随机整数,那么怎么得到均匀分布的0~10的随机整数呢?
恳请大家解答,谢谢!
...全文
131
11
打赏
收藏
一个有关随机整数的问题
今天碰到一个问题:如果rand8()得到的是均匀分布的0~7的随机整数,那么怎么得到均匀分布的0~10的随机整数呢? 恳请大家解答,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
buaajjb
2009-04-30
打赏
举报
回复
个人认为调用了两次rand8就已经不再是均匀分布了,比如取值为0的概率就不是1/64了
glacier3d
2008-11-06
打赏
举报
回复
[Quote=引用 9 楼 bottlebox 的回复:]
(rand8()*8+rand8())*11/64这个公式应该是有问题的。
要将最终结果放到11个均匀段上(0~10共11个等分概率),64/11=5.818。每个段对应的数是非整数的,实际的结果
(0-5)=>0;(6-11)=>1....(59-63)=>10.必然是有九段长为6,两段长为5。
[/Quote]
有道理,后来我也发现这个问题了,确实这里的量都是离散的,我当连续的思考了
所以,oo的才对
glacier3d
2008-11-05
打赏
举报
回复
[Quote=引用 6 楼 litaoye 的回复:]
恩,ls几个方法都很好,个人比较偏向oo的
int rand11()
{
m = 100;
while(m > 54)
{
m = rand8() * 8 + rand8();
}
return m % 11;
}
[/Quote]
貌似调用rand8()的次数会增多,
当然了,这题解法多多
瓶盒
2008-11-05
打赏
举报
回复
(rand8()*8+rand8())*11/64这个公式应该是有问题的。
要将最终结果放到11个均匀段上(0~10共11个等分概率),64/11=5.818。每个段对应的数是非整数的,实际的结果
(0-5)=>0;(6-11)=>1....(59-63)=>10.必然是有九段长为6,两段长为5。
shamrock19
2008-11-05
打赏
举报
回复
谢谢大家的解答,受教了:)
绿色夹克衫
2008-11-05
打赏
举报
回复
恩,ls几个方法都很好,个人比较偏向oo的
int rand11()
{
m = 100;
while(m > 54)
{
m = rand8() * 8 + rand8();
}
return m % 11;
}
glacier3d
2008-11-04
打赏
举报
回复
首先,0~7是均匀分布的,由两个rand8()可以产生下列均匀分布的数对:
(0,0) (0,1) ... (0,7)
(1,0) (1,0) ... (1,7)
...
(7,0) (7,1) ... (7,7)
由联合概率的计算知,上述64个数对是均匀分布的,且可对应0~63共64个数(可以看作8进制);
现在将单位1均分成64段,则由上一布产生的随机数r(0<=r<=63)所在位置为r/64,要将最终结果放到11个均匀段上(0~10共11个等分概率),所以应该让r/64除以1/11。
所以,最终计算方式为:
rand8()*8+rand8()*11/64
glacier3d
2008-11-04
打赏
举报
回复
这题貌是没有看上去的那么简单,关键是最后0~10是均匀分布的
jakqigle
2008-11-04
打赏
举报
回复
用线性同余法自己写随机数呢?!在一定很大的整数范围内里的数对10求余,映射到0~10的中的相应数。
oo
2008-11-04
打赏
举报
回复
可以只舍弃大于54的值,对0-54的值对11取余,这样会快一点。
大王派我去巡山
2008-11-04
打赏
举报
回复
连续调用两次rand8(),就可以拼出0~63范围内均匀分布的整数。
对于超过10的数字进行舍弃,再调用两次rand8()...直到找到满足要求的数字为止。
这样得到0~10范围内的整数仍然是均匀分布的。
Matlab 如何生成
一个
[a,b]范围内
随机
整数
的2种方法【已经解决】
如何使用MATLAB生成
一个
[a,b]范围内的
随机
整数
比如:
随机
生成[9,13]范围内的
一个
(或多个)
整数
~ 我搜索了网上很多博客,介绍的无外乎是: 要不就是0-x的,要不就是1-y范围的。 比如: randint() 这个函数高版本的matlab不能用了 randi() 这个我搜索了没有相关详细的介绍 randn() randperm(n) 等等 但是始终无法得到想要的范围[a,b]内的
随机
整数
。 比如我想得到
一个
[9,13]范围内的
随机
整数
。 rand(9,13) rand()函数生成
python产生20个
随机
整数
_python如何产生20个
随机
整数
python如何产生20个
随机
整数
,
整数
,的是,方法,可能会,httpspython如何产生20个
随机
整数
易采站长站,站长之家为您整理了python如何产生20个
随机
整数
的相关内容。python产生20个
随机
整数
的方法:1、用random中的sample生成
随机
不重复的
整数
;2、用numpy中的【random.randint】生成完全
随机
的
整数
。python产生20个
随机
整数
的方法:1、pytho...
MATLAB 生成
随机
整数
的各种方法以及实例
MATLAB提供了多种生成
随机
整数
的方法,下面我们就着重介绍几种常用的方法。 方法一:rand() rand()函数常用来生成0-1之间的
随机
矩阵,那么我们完全也可以用来生成我们想要的任意大小、任意个数的
随机
整数
。 1,生成0-5之间的10个
随机
整数
在matlab主窗口中输入round(rand(1,10)*5) 回车2,生成1个
随机
整数
,, 命令 rou
生成
随机
整数
方法
MATLAB 生成
随机
整数
的各种方法以及实例 MATLAB提供了多种生成
随机
整数
的方法,下面我们就着重介绍几种常用的方法。 方法一:rand() rand()函数常用来生成0-1之间的
随机
矩阵,那么我们完全也可以用来生成我们想要的任意大小、任意个数的
随机
整数
。 1,生成0-5之间的10个
随机
整数
在matlab主窗口中输入round(rand(1,10)*5)
生成
随机
整数
的Matlab代码
在Matlab中,生成
随机
整数
是
一个
常见的需求,可以通过内置的函数来实现。你可以通过指定序列的长度和范围来控制生成的
随机
整数
。上述代码将生成
一个
范围在1到100之间的
随机
整数
,并将其输出到命令窗口。如果你再次运行该代码,生成的
随机
数将会是相同的。这里介绍的是Matlab中生成
随机
整数
的几种常见方法,你可以根据自己的需求选择合适的方法。上述代码将生成
一个
长度为10的、范围在1到100之间的
随机
整数
序列,并将其输出到命令窗口。上述代码将生成
一个
1到10之间的
随机
整数
,并将其输出到命令窗口。
数据结构与算法
33,028
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章