随机数范围的不同概率

编程入门 行业动态 更新时间:2024-10-27 20:39:26
本文介绍了随机数范围的不同概率的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在寻找实现随机数生成器的最佳方法,这将使我能够控制生成的数字将返回的范围.为了形象化我要实现的目标,我有一幅画:

I'm looking for the best way of implementing random number generator, that will allow me to have control over probability from what range the generated number will be returned. To visualize what I'm trying to achieve I have a picture :

所以总结一下: 假设我的范围是400.一开始,我希望有5%的概率获得数字0-20.但是在某个时候,我希望这个可能性增加到50%.希望你能明白.

So to summarize : Let's say that my range is 400. At the beginning I'd like to have 5% probability of getting number 0-20. But at some moment in time I'd like to have this probability increased up to 50%. Hope you get the idea.

推荐答案

嗯,在您的原始图片上,我有一个非常简单的算法,可以按适当的比例在数组中生成范围,然后随机选择一个范围并生成一个随机数在该范围内.毫无疑问,如果有必要可以对其进行优化,但是它对我有用.

Hmm, working on your original I had a pretty simple algorithm to generate ranges in an array in the appropriate proportion, then randomly select a range and generate a random number within that range. No doubt it can be optimised if necessary, but it works for me.

看起来很多代码,但其中的3/4是注释,测试数据和函数,实际的 randomRange 函数只有17行代码.

It looks like a lot of code, but 3/4 of it is comments, test data and function, the actual randomRange function is only 17 lines of code.

<script type="text/javascript"> function randomRange(dataArray) { // Helper function function getRandomInRange(s, f) { return (Math.random() * (f-s+1) | 0) + s } // Generate new data array based on probability var i, j = dataArray.length; var oArray = []; var o; while (j--) { o = dataArray[j]; // Make sure probability is an integer for (i=0, iLen=o.probability|0; i<iLen; i++) { oArray.push([o.rangeStart, o.rangeEnd]); } } // Randomly select a range from new data array and // generate a random number in that range var oEnd = oArray.length; var range = oArray[getRandomInRange(0, oArray.length - 1)]; return getRandomInRange(range[0], range[1]); } // Test data set. Probability just has to be // representative, so 50/50 === 1/1 var dataArray = [ { rangeStart: 0, rangeEnd : 20, probability: 1 }, { rangeStart: 21, rangeEnd : 400, probability: 1 } ]; // Test function to show range and number is randomly // selected for given probability function testIt() { var el0 = document.getElementById('div0'); var el1 = document.getElementById('div1'); function run() { var n = randomRange(dataArray); if (n <= 20) { el0.innerHTML += '*'; } else { el1.innerHTML += '*'; } } setInterval(run, 500); } </script> <button onclick="testIt();">Generate random number</button> <div>Numbers 0 - 20</div> <div id="div0"></div> <div>Numbers 21 - 400</div> <div id="div1"></div>

更多推荐

随机数范围的不同概率

本文发布于:2023-10-28 23:04:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1538022.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:随机数   概率

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!