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

The*_*978 5 arrays random math distribution actionscript-3

我试图用随机数填充数组,但随机数必须是彼此相距一定的最小距离.

我已经在0到100之间填充了一个包含5个随机数的数组:

private var myArray:Array = new Array();

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

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

myArray.sort(Array.NUMERIC);
Run Code Online (Sandbox Code Playgroud)

在填充和排序后,我们假设myArray现在包含以下值:

26, 27, 42, 92, 97
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

bti*_*lly 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个元素,对它们进行排序,然后开始添加分隔符.