Heim  >  Artikel  >  Java  >  Wie kann ich eine gewichtete Zufallsauswahl in Java implementieren?

Wie kann ich eine gewichtete Zufallsauswahl in Java implementieren?

Susan Sarandon
Susan SarandonOriginal
2024-11-06 19:58:03704Durchsuche

How can I implement Weighted Random Selection in Java?

Gewichtete Zufallsauswahl in Java

Bei der Auswahl eines zufälligen Elements aus einer Menge ist es oft wünschenswert, die Auswahl auf Elemente mit höherer Assoziation auszurichten Gewichte. In Java kann dies mithilfe einer NavigableMap erreicht werden, einer speziellen Datenstruktur, die speziell auf diesen Zweck zugeschnitten ist.

Die RandomCollection-Klasse, die mithilfe einer NavigableMap implementiert wird, ermöglicht das Hinzufügen gewichteter Elemente und ruft zufällige Elemente basierend auf ihren jeweiligen Elementen ab Gewichte. Um eine RandomCollection zu erstellen, geben Sie einfach einen Zufallsgenerator an (optional, oder verwenden Sie den Standard-Random).

Das Hinzufügen von Elementen zur RandomCollection ist unkompliziert. Jedem Element ist eine Gewichtung zugeordnet, die seine Auswahlwahrscheinlichkeit darstellt. Das Gesamtgewicht bleibt erhalten, wenn neue Artikel hinzugefügt werden.

Um einen zufälligen Artikel auszuwählen, wird eine Zufallszahl zwischen 0 und dem Gesamtgewicht generiert. Anschließend wird die Methode „higherEntry()“ der NavigableMap verwendet, um den ersten Eintrag mit einer Gewichtung abzurufen, die größer als die Zufallszahl ist. Der diesem Eintrag zugeordnete Wert ist das zufällig ausgewählte Element.

Beispiel:

RandomCollection<String> rc = new RandomCollection<>();
rc.add(40, "dog").add(35, "cat").add(25, "horse");

for (int i = 0; i < 10; i++) {
    System.out.println(rc.next());
}

Dieser Code generiert eine zufällige Folge von Tieren („Hund“, „Katze“, „Pferd“) ) nach ihren Wahrscheinlichkeiten gewichtet.

Das obige ist der detaillierte Inhalt vonWie kann ich eine gewichtete Zufallsauswahl in Java implementieren?. 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