Heim > Backend-Entwicklung > C++ > Wie kann der Zufallszahlengenerator von Boost für die Auswahl gewichteter Zufallszahlen verwendet werden?

Wie kann der Zufallszahlengenerator von Boost für die Auswahl gewichteter Zufallszahlen verwendet werden?

Linda Hamilton
Freigeben: 2024-12-15 20:43:13
Original
493 Leute haben es durchsucht

How Can Boost's Random Number Generator Be Used for Weighted Random Number Selection?

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:

  • 1: 90 %
  • 2: 56 %
  • 3: 4 %

Algorithmus

Boost verfügt nicht über eine integrierte Funktionalität zur gewichteten Zufallszahlengenerierung. Es gibt jedoch einen einfachen Algorithmus, der angewendet werden kann:

  1. Berechnen Sie das Gesamtgewicht:Summieren Sie die Gewichte aller Artikel.
  2. Generieren Sie ein Zufallszahl:Wählen Sie eine Zufallszahl zwischen 0 und dem Gesamtgewicht.
  3. Durchlaufen Gewichte: Gehen Sie das Gewicht jedes Artikels durch und subtrahieren Sie es von der Zufallszahl, bis die Zahl kleiner wird als das Gewicht des aktuellen Artikels.
  4. Artikel zurückgeben: Der Artikel, der der Position entspricht, an der er sich befindet Die Zufallszahl wurde negativ und ist das ausgewählte Element.

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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage