2011-02-05 85 views
5

我試圖用隨機數填充一個數組,但隨機數必須是彼此相距一定的最小距離。用最小的間隔符/分佈填充隨機數組的數組?

我已經填充的數組具有5張隨機數之間0 - 100:填充和排序讓我們假設後

myArray.sort(Array.NUMERIC); 

private var myArray:Array = new Array(); 

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

下我已經排序按數值順序排列myArray現在包含以下值:

26, 27, 42, 92, 97 

現在我想讓一些礦石的所有數組值被重置,如果他們需要的話,至少它們至少是相互之間最大值(100)的某個百分比(比方說10%)。

前2個值(26和27)相距至少10%,最後2個值(92和97)都不是。但是,如果我只是將值27從26中移出10%,以便將27更改爲37,37現在與下一個值42衝突。

什麼是填充隨機數數值的最佳方法誰的值將至少相互隔開一定的百分比,但仍然是隨機的。

它可能會不言而喻,但我正在尋找一個可移植的解決方案,其中最大值和最小分佈百分比可以是任何東西,而不僅僅是我上面的示例。

+0

你關心命令嗎?例如,「10 30 50」和「50 10 30」是否有所不同,或者您是否對其進行分類? – Ishtar 2011-02-05 16:46:53

回答

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個元素將它們分割成x到y的範圍,然後填充範圍(x,y - (n-1)* d)中的n個元素,對它們進行排序,然後開始添加分隔符。

0

如果你知道每個變量值(例如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);