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!