使用最小间隔符/分布填充随机数组?

时间:2011-02-05 16:13:15

标签: arrays actionscript-3 math random distribution

我正在尝试使用随机数填充数组,但随机数必须相互间隔一定距离。

我填充了一个数组,其中包含0到100之间的5个随机数:

private var myArray:Array = new Array();

for (var i:uint = 0; i < 5; i++)
    myArray.push(Math.round(Math.random() * 100));

接下来我按数字顺序对数组进行了排序:

myArray.sort(Array.NUMERIC);
填充和排序后,我们假设 myArray 现在包含以下值:

26, 27, 42, 92, 97

现在我想要重置一些所有数组值,如果它们需要,那么它们至少相互之间的最大值(100)的某个百分比(比如说10%)

前2个值(26和27)相距不至少10%,最后2个值(92和97)也不是。但是,如果我只是将值27从27移开10%,那么27变为37,37现在与下一个值42冲突。

填充一组随机数的最佳方法是什么,这些随机数的值将至少相互之间保持一定的百分比,但仍然是随机的。

可能不言而喻,但我正在寻找一种可移植的解决方案,其中最大值和最小分配百分比可以是任何东西,而不仅仅是我上面的例子。

2 个答案:

答案 0 :(得分:7)

在您的情况下,您需要5个数字,彼此至少10个。您应该做的是创建0到60之间的5个数字,对它们进行排序,然后开始添加分隔符。因此,如果您的原始列表为26, 27, 42, 52, 57,那么您的新列表为26, 27+10, 42+20, 52+30, 57+4026, 37, 62, 82, 97

这可以推广到任何所需的范围,元素数量和分频器的大小。如果你想要n个元素至少d除以x到y的范围,那么填充范围(x,y - (n-1)* d)中的n个元素,对它们进行排序,然后开始添加分隔符。

答案 1 :(得分:0)

如果你知道每个变量值(例如10%)和最小值(0%,20%,40%,60%,80%)的百分比增量,你也知道100%的价值(我们称之为基数= 100 ),然后你将生成这样的数组:var array: Array = new Array(Math.round(Math.random() * 0.1 * base), Math.round(Math.random() * 0.1 * base) + 0.2 * base, Math.round(Math.random() * 0.1 * base) + 0.4 * base, Math.round(Math.random() * 0.1 * base) + 0.6 * base, Math.round(Math.random() * 100) + 0.8 * 0.1 * base);