1. Problemdefinition:
Fragen Sie ein Array. Überschneidung
Zum Beispiel:
Kopieren Sie den Code -Code wie folgt:
Gewicht: 8 2 11 79
Der Wert, der mit Gewicht zurückgegeben wurde: 0 1 2 3
2. Analyse des Problems:
Idee 1: Erstellen Sie ein Array der Größe und des Gewichts der Größe und des Gewichts. Die Kategorie wird in Ordnung gebracht.
Verwenden Sie dann eine zufällige Anzahl von Gewicht und Größe, um zufällige Zahlen zu erzeugen. Nachteile sollten zu viel Gedächtnis einnehmen.
Idee 2:
Gewicht und Array w [i] speichern die Gewicht und die Zeitkomplexität aller Elemente von [0, i].
Zufälliger [0, W [399]] sehen, welche Zeit die Zufallszahl fällt, in welcher Zeitkomplexität O (LONGN)
Die Gesamtzeitkomplexität des Gesamtzeitkomplexität o (n) räumliche Komplexität O (n)
Pseudocode:
Drehunges Glücksspiel ist keine besonders gute Option, aber leicht zu erreichen.
Zunächst ist es notwendig zu verstehen, dass aufgrund der Kreuzung und anderer Operatoren die Evolutionsrichtung nicht kontrolliert werden kann, sodass die starke Verantwortung der Evolution auf dem Auswahlbetreiber liegt.
Wenn Sie dies verstehen, ist es einfach zu tun.
Drehunges Glücksspiel ist die Anhäufung der Wahrscheinlichkeit, dass es in der Regel ausgewählt wird.
Wenn: Anpassung die Anpassung des Arrays ist, lautet ein Total M Copy -Code wie folgt:
für i = 1 bis m '
Sum = sum+fit (i)
Als nächstes ich
Für i = 1 bis n 'n- Wie viele Personen möchten Sie generieren?
Temp = temp + fit (i)
Wenn rnd <= temp / s
Ausgabe I ist das Ergebnis
Ausgangsfunktion
Ende wenn
Als nächstes ich
Drittens lösen Sie das Problem:
Kopieren Sie den Code -Code wie folgt:
Paketdatastruktur;
Import Java.util.hashMap;
Import Java.util.map;
/**
Gewicht Zufallszahl:
Wenn Gewicht: 8 2 11 79
Der Wert, der mit Gewicht zurückgegeben wurde: 0 1 2 3
@Author Ajian005 [email protected]
2014-2-16 21:12
Ausgabeergebnisse: {2.0 = 184128, 11.0 = 348551, 79,0 = 1308100, 8,0 = 159221}}
*/
public class woittrandomTest {
Private statische Doppel [] GewichtArrays = {8.0, 2.0, 11,0,79,0};
Public static void main (String [] args) {{{{{{{{{{
WOGTRANDOM WAGTRANDOM = NEUER WOCTRANDOM ();
Karte <double, Integer> stat = new HashMap <double, Integer> ();
für (int i = 0; i <2000000; i ++) {
int GewichtValue = WOCTRANDOM.
if (WeightValue <0) {{{{{
weitermachen;
}
System.out.println ("Zufallszahl nach Gewicht zurückgegeben:" + GewichtsValue);
if (stat.get (WeightArrays [WeightValue]) == NULL) {
Stat.put (WeightArrays [WeightValue], 1);
} Anders {
stat.put (WeightArrays [WeightValue], Stat.get (GewichtArrays [WeightValue])+1);
}
}
System.out.println (STAT);
}
}
Klasse wiegen {
java.util.random r = new java.util.random ();
Private double GewichtArraysum (double [] WeightArrays) {{{{{{{{{{{{{{{{{{{
Doppelgewicht = 0;
Für (Double WeightValue: WeightArrays) {
Gewicht += WeightValue;
}
Return Gewicht;
}
Public int getweightrandom (double [] wightArrays) {{{{{
Doppelgewicht = WeightArraysum (WeightArrays);
double stepgewichtsum = 0;
für (int i = 0; i <woitharrays.length; i ++) {
Stepgewichtsum += wightArrays [i];
if (math.random () <= Stepgewichtsum/Gewicht) {
//System.out.println (i);
Kehre I zurück;
}
}
System.out.println ("Fehler");
Return -1;
}
}
Viertens Zusammenfassung Zusammenfassung:
Russisches rundes Glücksspiel soll die Wahrscheinlichkeit erreichen, um zu erreichen
Abhängige Lastplanung usw.