1. Définition du problème:
Demandez à un tableau. Intersection
Par exemple:
Copier le code du code comme suit:
Poids: 8 2 11 79
La valeur renvoyée par poids: 0 1 2 3
2. Analyse du problème:
Idée 1: Créez un tableau de la taille et du poids de la taille et du poids. La catégorie est poussée dans l'ordre.
Utilisez ensuite un nombre aléatoire de poids et de taille pour générer des nombres aléatoires. Les inconvénients devraient occuper trop de mémoire.
Idée 2:
Poids et tableau avec [i] stocker le poids et la complexité du temps de tous les éléments de [0, i].
Aléatoire [0, w [399]]] Voir quelle heure le nombre aléatoire tombe dans quelle complexité de temps o (longn)
Ainsi, la complexité totale de complexité de temps o (n) complexité spatiale o (n)
Pseudocode:
Le jeu rotatif n'est pas une option particulièrement bonne, mais il est facile à réaliser.
Tout d'abord, il est nécessaire de comprendre qu'en raison de la mutation croisée et des autres opérateurs, la direction de l'évolution ne peut pas être contrôlée, donc la lourde responsabilité de l'évolution est sur l'opérateur de sélection.
Si vous comprenez cela, c'est facile à faire.
Le jeu en rotation consiste à accumuler la probabilité d'y parvenir.
Si: l'ajustement est l'adaptation du tableau, un code de code de copie total total est le suivant:
pour i = 1 à m '
Sum = sum + fit (i)
Suivant je
Pour i = 1 à n 'n- combien de personnes voulez-vous générer?
Temp = temp + ajustement (i)
Si rnd <= temp / s
La sortie i est le résultat
Fonction de sortie
Terminer si
Suivant je
Troisièmement, résolvez le problème:
Copier le code du code comme suit:
Datastruc de package;
Import java.util.hashmap;
Importation java.util.map;
/ **
Nombre aléatoire de poids:
Si le poids: 8 2 11 79
La valeur renvoyée par poids: 0 1 2 3
@author ajian005 [email protected]
2014-2-16 21:12
Résultats de la sortie: {2.0 = 184128, 11.0 = 348551, 79.0 = 1308100, 8.0 = 159221}}
* /
classe publique pesertrandomtest {
Private Static Double [] WeightArrays = {8.0, 2.0, 11.0,79.0};
Public static void main (String [] args) {{{
Pesertrandom pesertrandom = new pesertrandom ();
Map <double, entier> stat = new hashmap <double, entier> ();
pour (int i = 0; i <2000000; i ++) {
int WeightValue = pesertrandom.getweightrandom (WeightArrays);
if (WeightValue <0) {{
continuer;
}
System.out.println ("Nombre aléatoire renvoyé par poids:" + WeightValue);
if (stat.get (WeightArrays [WeightValue]) == null) {
Stat.put (WeightArrays [WeightValue], 1);
} Autre {
stat.put (WeightArrays [WeightValue], stat.get (WeightArrays [WeightValue]) + 1);
}
}
System.out.println (STAT);
}
}
classe pesertrandom {
java.util.random r = new java.util.random ();
Double poids privé (double [] WeightArrays) {{{
double poids = 0;
Pour (double poids de poids: WeightArrays) {
Weightsum + = WeightValue;
}
Retour de poids;
}
Public int getweightrandom (double [] WeightArrays) {{
Double poids = WeightArraysum (WeightArrays);
poids double étape = 0;
pour (int i = 0; i <weightarrays.length; i ++) {
StepweightSum + = WeightArrays [i];
if (math.random () <= stepweightSum / Weightsum) {
//System.out.println (i);
Retour i;
}
}
System.out.println ("erreur");
Retour -1;
}
}
Quatrièmement, résumé Résumé:
Les jeux de hasard russes accumulent la probabilité de réaliser
Planification de charge dépendante, etc.