从集合中选择一个项目时,通常需要为不同的项目分配不同的概率。此方法称为加权随机选择。
考虑以下场景,其中您有一组具有关联权重的项目:
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中文网其他相关文章!