2011-02-05 8 views
5

intento poblar una matriz con números aleatorios, pero los números aleatorios deben estar a una cierta distancia mínima, uno del otro.¿Cómo rellenar una matriz de números aleatorios con espaciadores mínimos/distribución?

He poblada una matriz con 5 números aleatorios entre 0 - 100:

private var myArray:Array = new Array(); 

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

próxima He ordenado la matriz en orden numérico:

myArray.sort(Array.NUMERIC); 

después de poblar y clasificación asumamos que miMatriz ahora contiene los siguientes valores:

26, 27, 42, 92, 97 

ahora me gustaría que se reajusten todos los valores de la matriz, si es necesario, de modo que estén separados al menos un cierto porcentaje (digamos un 10%) del valor máximo (100).

los primeros 2 valores (26 y 27) no están separados al menos en un 10% y tampoco los 2 últimos valores (92 y 97). sin embargo, si simplemente moví el valor 27 10% de 26, de modo que 27 cambia a 37, 37 ahora entra en conflicto con el siguiente valor de 42.

¿cuál es el mejor enfoque para completar una matriz de números aleatorios que son valores será al menos un cierto porcentaje aparte el uno del otro, pero aún aleatorio.

es evidente, pero estoy buscando una solución que sea portátil, donde los valores máximos y los porcentajes mínimos de distribución pueden ser cualquier cosa, no solo para mi ejemplo anterior.

+0

¿Le importa la orden? Por ejemplo, son '10 30 50' y' 50 10 30' diferentes, ¿o lo ordena de todos modos? – Ishtar

+0

sí, el orden de la matriz resultante debe ordenarse numéricamente. – TheDarkIn1978

Respuesta

7

En su caso, quiere 5 números, todos al menos 10 el uno del otro. Lo que debe hacer es crear 5 números del 0 al 60, ordenarlos y luego comenzar a agregar los divisores. Entonces, si su lista original es 26, 27, 42, 52, 57, entonces su nueva lista es 26, 27+10, 42+20, 52+30, 57+40 o 26, 37, 62, 82, 97.

Esto se puede generalizar a cualquier rango deseado, cantidad de elementos y tamaño del divisor. Si quiere n elementos con al menos d dividiéndolos en un rango de xa y, llene n elementos en el rango (x, y - (n-1) * d), ordénelos y comience a agregar los divisores en.

0

si conoce porcentajes delta para cada valor variable (ej. 10%) y valor mínimo (0%, 20%, 40%, 60%, 80%), también sabe 100% valor (llamémoslo base = 100), entonces generará una matriz como esta: 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);