Gewichtete Zufallszahlengenerierung
Die Auswahl von Zufallszahlen mit bestimmten Wahrscheinlichkeiten ist eine häufige Aufgabe in der Programmierung. Der Zufallszahlengenerator von Boost bietet eine bequeme Möglichkeit, Elemente mit gewichteten Wahrscheinlichkeiten auszuwählen.
Stellen Sie sich das Szenario vor, in dem Sie eine Zufallszahl zwischen 1 und 3 mit den folgenden Gewichten auswählen möchten:
Algorithmus
Boost verfügt nicht über eine integrierte Funktionalität zur gewichteten Zufallszahlengenerierung. Es gibt jedoch einen einfachen Algorithmus, der angewendet werden kann:
Code Beispiel
In Boost unter Verwendung des Zufallszahlengenerators random_device und mt19937:
std::mt19937 rng(std::random_device{}()); int total_weight = 90 + 56 + 4; for (int i = 0; i < total_weight; i++) { int random_number = rng() % total_weight; int current_weight = 90; if (random_number < current_weight) { return 1; } current_weight += 56; if (random_number < current_weight) { return 2; } return 3; // Reached the end of the weights }
Optimierungen
Wenn sich Gewichte selten ändern und zufällig sind Da Kommissionierungen häufig vorkommen, kann eine Optimierung angewendet werden, indem die kumulative Gewichtssumme in jedem Artikel gespeichert wird. Dies ermöglicht einen effizienteren binären Suchansatz.
Wenn außerdem die Anzahl der Elemente unbekannt, aber die Gewichte bekannt sind, kann die Reservoirstichprobe für die Generierung gewichteter Zufallszahlen angepasst werden.
Das obige ist der detaillierte Inhalt vonWie kann der Zufallszahlengenerator von Boost für die Auswahl gewichteter Zufallszahlen verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!