创建有利于较小数字的随机数

时间:2011-12-14 20:25:53

标签: algorithm math random numbers calculus

说我生成了一组随机数并将它们放入一个数组中,(为了简单而预先排序)我将使用javascript来显示数学:

var vals = new Array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,...,10000);

然后在一个循环中,我创建了一个随机数作为索引:

for(i=0;i<10000;i++){
    var random_index = Math.floor(Math.random() * 10000);
    var result = vals[random_index];
}

如果您在任何类型的图表上查看此输出,结果(通过该循环的足够迭代,将看起来非常随机且平衡)

我想要的是,每个访问的结果都支持较小的数字,顺便说一下这里是具有较低索引的数组元素。

对于一个视觉示例,假设您正试图在地图上绘制烟花碎片落下的地图。这些碎片中的大部分会随机落入附近,但中间的浓度较重。这是一个过于复杂的例子,因为它考虑了另一个维度并使用物理来实现结果,但它是相同的原则。

我应该对random_index变量执行什么操作以使其“偏好”较小的数字?

2 个答案:

答案 0 :(得分:2)

通常的方法(例如,如here所述)是定义所需的分布函数,然后使用两种方法之一将均匀分布的随机变量转换为具有所需分布的随机变量。如果您的目标分布足够简单,则可以使用inverse transform sampling

如果你真的不关心分布函数是什么,只是它有利于较小的值,一个简单的方法可能是生成一个统一的r.v.在[min 2 ,max 2 ]范围内,然后将其平方根作为r.v。

答案 1 :(得分:1)

你可以做很多事情。

例如:

Math.floor(Math.sqrt(Math.random() * 10000^2));

真正的问题是,您想要什么样的发行