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
Linda HamiltonOriginal
2024-12-15 20:43:13494Durchsuche

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
}

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!

Stellungnahme:
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