1. Definición del problema:
Pregúntele a una matriz. Intersección
Por ejemplo:
Copiar código del código de la siguiente manera:
Peso: 8 2 11 79
El valor devuelto por peso: 0 1 2 3
2. Análisis del problema:
Idea 1: Cree una matriz del tamaño y el peso del tamaño y el peso. La categoría se empuja en orden.
Luego use un número aleatorio de peso y tamaño para generar números aleatorios. Las desventajas deberían ocupar demasiada memoria.
Idea 2:
Peso y matriz w [i] almacenan el peso y la complejidad del tiempo de todos los elementos de [0, i].
Aleatorio [0, w [399]]] Vea a qué hora se cae el número aleatorio en qué complejidad del tiempo o (longn)
Entonces, la complejidad del tiempo total o (n) complejidad espacial o (n)
Pseudocódigo:
El juego giratorio no es una opción particularmente buena, pero es fácil de lograr.
En primer lugar, es necesario comprender que debido a la mutación cruzada y otros operadores, la dirección de la evolución no puede controlarse, por lo que la gran responsabilidad de la evolución está en el operador de selección.
Si comprende esto, es fácil de hacer.
El juego giratorio es acumular la probabilidad de lograrlo.
IF: FIT es la adaptación de la matriz, un código de código de copia M total es el siguiente:
para i = 1 a m '
Sum = suma+ajuste (i)
Siguiente
Para i = 1 a n 'n- ¿cuántas personas quieres generar?
Temp = temp + fit (i)
Si rnd <= temp / s
El resultado es el resultado
Función de salida
Final si
Siguiente
Tercero, resuelva el problema:
Copiar código del código de la siguiente manera:
paquete dataStruct;
Import java.util.hashmap;
Import java.util.map;
/**
Número aleatorio de peso:
Si peso: 8 2 11 79
El valor devuelto por peso: 0 1 2 3
@author AJIAN005 [email protected]
2014-2-16 21:12
Resultados de la salida: {2.0 = 184128, 11.0 = 348551, 79.0 = 1308100, 8.0 = 159221}}
*/
clase pública peseDrandomTest {
Private static double [] weightArrays = {8.0, 2.0, 11.0,79.0};
Public static void main (string [] args) {{
Pesaje Pesaje Pesaje = new FESEDRANDOM ();
Map <double, integer> stat = new Hashmap <double, integer> ();
para (int i = 0; i <2000000; i ++) {
int weightValue = FESOTRANDOM.GETWEIGHTRANDOM (WeightArrays);
if (weightValue <0) {{
continuar;
}
System.out.println ("Número aleatorio devuelto por peso:" + WeightValue);
if (stat.get (weightArray [weightValue]) == null) {
Stat.put (WeightArray [WeightValue], 1);
} Demás {
stat.put (WeightArray [WeightValue], stat.get (WeightArray [WeightValue])+1);
}
}
System.out.println (stat);
}
}
clase Pesaje PLANDO {
java.util.random r = new java.util.random ();
Double WeightArrayum privado (doble [] WeightArrays) {{
doble peso = 0;
Para (doble peso de peso: weightarrays) {
Peso += WeightValue;
}
Retorno de pesas;
}
Public int getWeighTrandom (doble [] WeightArrays) {{
doble pesos = weightarraysum (weightarrays);
Doble stepweafessum = 0;
para (int i = 0; i <weightarrays.length; i ++) {
SteplewepeSum += weightArray [i];
if (math.random () <= steplewightsum/weightsum) {
//System.out.println (i);
Regresar i;
}
}
System.out.println ("error");
Regreso -1;
}
}
Cuarto, resumen de resumen:
El juego ruso redondo es acumular la probabilidad de lograr
Programación de carga dependiente, etc.