【问题标题】:Populating an Array of Random Numbers with Minimum Spacers/Distribution?填充具有最小间隔/分布的随机数数组?
【发布时间】:2011-02-05 16:13:15
【问题描述】:

我正在尝试用随机数填充数组,但随机数之间必须有一定的最小距离。

我已经用 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 从 26 移开 10%,以便 27 更改为 37,则 37 现在与下一个值 42 冲突。

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

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

【问题讨论】:

  • 你关心订单吗?例如,10 30 5050 10 30 是不同的,还是你无论如何都要排序?
  • 是的,结果数组的顺序必须按数字排序。

标签: arrays actionscript-3 math random distribution


【解决方案1】:

在您的情况下,您需要 5 个数字,彼此至少 10 个。您应该做的是创建 5 个从 0 到 60 的数字,对它们进行排序,然后开始添加分隔符。因此,如果您的原始列表是 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 个元素,对它们进行排序,然后开始添加分隔符。

【讨论】:

    【解决方案2】:

    如果您知道每个变量值(例如 10%)和最小值(0%、20%、40%、60%、80%)的百分比增量,那么您也知道 100% 值(我们称其为 base = 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);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 2011-01-23
      • 1970-01-01
      • 2013-11-18
      • 2013-09-16
      相关资源
      最近更新 更多