從集合中選擇一個項目時,通常需要為不同的項目分配不同的機率。此方法稱為加權隨機選擇。
考慮以下場景,其中您有一組具有關聯權重的項目:
Item | Weight |
---|---|
Sword of Misery | 10 |
Shield of Happy | 5 |
Potion of Dying | 6 |
Triple-Edged Sword | 1 |
在這種情況下,權重表示選擇的可能性那個項目。例如,你獲得痛苦之劍的可能性是三刃劍的 10 倍。
要在Java 中實現加權隨機選擇,我們可以使用NavigableMap:
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(); } }
用法:
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()); }
此程式碼加入集合中,然後根據分配的機率選擇隨機項目。
以上是如何用Java實現加權隨機選擇?的詳細內容。更多資訊請關注PHP中文網其他相關文章!