Heim  >  Artikel  >  Java  >  Wie implementiert man eine gewichtete Zufallsauswahl in Java?

Wie implementiert man eine gewichtete Zufallsauswahl in Java?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-08 08:05:01220Durchsuche

How to Implement Weighted Random Selection in Java?

Gewichtete Zufallsauswahl in Java

Bei der Auswahl eines Elements aus einer Menge ist es oft wünschenswert, verschiedenen Elementen unterschiedliche Wahrscheinlichkeiten zuzuweisen. Diese Methode wird als gewichtete Zufallsauswahl bezeichnet.

Stellen Sie sich das folgende Szenario vor, in dem Sie über eine Sammlung von Elementen mit zugehörigen Gewichtungen verfügen:

Item Weight
Sword of Misery 10
Shield of Happy 5
Potion of Dying 6
Triple-Edged Sword 1

In diesem Fall stellt die Gewichtung die Auswahlwahrscheinlichkeit dar diesen Artikel. Beispielsweise ist die Wahrscheinlichkeit, dass Sie das Schwert des Elends erhalten, zehnmal höher als das dreischneidige Schwert.

Um eine gewichtete Zufallsauswahl in Java zu implementieren, können wir eine NavigableMap verwenden:

import java.util.NavigableMap;
import java.util.Random;
import java.util.TreeMap;

public class RandomCollection<E> {
    private final NavigableMap<Double, E> map = new TreeMap<>();
    private final Random random;
    private double total = 0;

    public RandomCollection() {
        this(new Random());
    }

    public RandomCollection(Random random) {
        this.random = random;
    }

    public RandomCollection<E> add(double weight, E result) {
        if (weight <= 0) return this;
        total += weight;
        map.put(total, result);
        return this;
    }

    public E next() {
        double value = random.nextDouble() * total;
        return map.higherEntry(value).getValue();
    }
}

Verwendung:

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

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

Dieser Code zeigt, wie man Elemente mit bestimmten Gewichtungen zur Sammlung hinzufügt und dann zufällige Elemente basierend auf den ihnen zugewiesenen Wahrscheinlichkeiten auswählt.

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