3

假设我生成了一组随机数并将它们放入一个数组中,(为简单起见预先排序)我将使用 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 变量执行什么操作以使其“偏爱”较小的数字?

4

2 回答 2

2

通常的方法(例如这里解释的)是定义您想要的分布函数,然后使用两种方法之一将均匀分布的随机变量转换为具有所需分布的随机变量。如果您的目标分布足够简单,您可以使用逆变换采样

如果您并不真正关心分布函数是什么样的,只是它偏爱较小的值,那么一种简单的方法可能是在 [min 2 , max 2 ] 范围内生成一个统一的 rv,然后将其平方根作为您的 rv

于 2011-12-14T20:35:45.720 回答
0

你可以做很多事情。

例如:

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

真正的问题是,你想要什么样的分布?

于 2011-12-14T20:36:22.287 回答