我想根据分布概率生成一个数字。例如,假设每个数字出现以下情况:Number|Count1|1502|403|154|3withatotalof(150+40+15+3)=208thentheprobabilityofa1is150/208=0.72andtheprobabilityofa2is40/208=0.192我如何制作一个随机数生成器,返回基于此概率分布的数字?我很高兴现在它基于一个静态的、硬编码的集合,但我最终希望它从数据库查询中推导出概率分布。我见过类似的例子,例如thisone但它们不是很通用。有什么建议吗? 最佳答案
我正在尝试设计一种(好的)方法来从一系列可能的数字中选择一个随机数,其中范围内的每个数字都被赋予了权重。简单来说:给定数字范围(0,1,2)选择一个数字,其中0有80%的概率被选中,1有10%的概率,2有10%的概率。我上大学统计课已经大约8年了,所以你可以想象我现在还不知道正确的公式。这是我想出的“廉价而肮脏”的方法。此解决方案使用ColdFusion。你可以使用任何你喜欢的语言。我是一名程序员,我认为我可以处理它的移植。最终我的解决方案需要在Groovy中——我在ColdFusion中写了这个,因为它很容易在CF中快速编写/测试。publicfunctionweightedRand
例如假设我有以下范围5031..50326248..6249如何生成这两个范围内的随机数? 最佳答案 简单的方法:(r1.to_a+r2.to_a).choice更快且内存效率更高的通用解决方案包括计算总范围大小、生成随机数,然后将数字标准化为它所在的范围。更新:好的,知道了。此解决方案适用于任意数量的范围,并且不会生成巨大的数组或遍历范围本身。(它在Ranges数组而不是Range元素数组上迭代两次。)defrangerand*rr.inject(rand(r.inject(0)do|accum,rng|accum+rng.las
我写了这段代码,但是当我运行它时,我只得到一个空白页面。怎么了?看来我已经接近答案了。我已经尝试了所有方法,但仍然无法正常工作。classButtonextendsReact.Component{constructor(props){super(props);this.state={random:0}}render(){varmin=1;varmax=100;varrand=min+(Math.random()*(max-min));handleClick(){this.setState({this.state.random+this.rand})}return();React.ren
是否可以使用ONESINGLE语句从一组数字中打印C++中的随机数?假设集合是{2,5,22,55,332}我查了rand()但我怀疑是否可以在一条语句中完成。 最佳答案 intnumbers[]={2,5,22,55,332};intlength=sizeof(numbers)/sizeof(int);intrandomNumber=numbers[rand()%length]; 关于来自一组的C++随机数,我们在StackOverflow上找到一个类似的问题:
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Randgeneratingsamenumbers在StackOverflow上回答另一个问题时尝试了以下方法:#include#includeusingnamespacestd;main(){srand(time(NULL));cout非常奇怪,第一个输出数字总是相似的数字,无论是在带有cygwin的Windows7上还是在带有Leopard的Mac上。最后一个数字是从0到1的一个很好的随机数。如果第一个cout行被注释掉,第一个打印的随机数总是一个相似的值。怎么会这样?
我正在使用下面的代码生成范围内的随机数...intrandomNumberWithinRange(intmin,intmax){intsnowSize=0;do{snowSize=rand()%max;}while(snowSizemax);returnsnowSize;}for(inti=0;i如果我退出我的应用程序并重新启动,则会生成相同的一组数字。如何为每次启动生成不同的随机数集。 最佳答案 做一些类似srand(time(NULL))的事情,即将它与时间同步(当然是在你的程序初始化时)。
C++11为C的rand()引入了一个非常优越的随机数库.在C中,您经常会看到以下代码:srand(time(0));rand()%MAX+MIN;因为time(0)以秒为单位返回当前时间,对程序的快速连续调用将产生相同的数字序列。对此的快速解决方法是以纳秒为单位提供种子:structtimevaltime;gettimeofday(&time,NULL);srand((time.tv_sec*1000)+(time.tv_usec/1000));当然,这并不能改变rand()的事实。被普遍认为是糟糕的,优秀的替代方案要么是不可移植的(如Linux的random()),要么依赖于第三方
我必须在没有任何float/double操作和函数的汇编器上编写伪随机生成器,例如sin/cos、sqrt等。所以我不能用一般的方法来做到这一点。我也有随机数限制:00-0F。我该怎么做?据我了解,我首先需要生成统一编号。我是这样做的:x=(13*x+7)%16;(但它有一个问题-这是有史以来最统一的分布。如果它生成15个数字并且我知道所有这些数字,我可以100%的概率说第16位,因为在16(模块)的周期中没有重复。然后,我需要将这些数字重新生成为高斯分布。我在互联网上找到了这个解决方案,但它不起作用。for(i=0;i我应该用它做什么?(我对概率论一窍不通)我得到gx和gy的输出:U
我想生成0到2^10范围内的2^30随机数。我听说rand()函数不适合这么多数字。有没有其他方法可以生成几乎均匀分布的函数? 最佳答案 C++库是一个很好的选择,有很多PRNG引擎和发行版可供选择。#include#include#includeintmain(){std::random_devicer;std::seed_seqseed{r(),r(),r(),r(),r(),r(),r(),r()};std::mt19937_64eng(seed);std::uniform_int_distributiondist(0,1此外