Java 中的随机加权选择
在编程领域,加权随机选择是指从集合中选择一个项目,其中概率为选择直接与相关权重相关。该技术适用于模拟和彩票等需要基于概率进行偏差选择的场景。
为了解决 Java 中的加权随机选择问题,我们引入了 NavigableMap 的概念。这种数据结构允许我们将权重映射到相应的项目并按升序遍历地图。在随机数生成器的帮助下,我们可以有效地选择概率与其重量成正比的项目。
让我们考虑一个以不同概率选择动物的示例:
要使用 NavigableMap 实现加权随机选择,我们可以创建一个类:
public class RandomCollection<E> { //NavigableMap to store weights and corresponding items private final NavigableMap<Double, E> map = new TreeMap<>(); //Random instance for generating random weights private final Random random; //Total sum of weights private double total = 0; public RandomCollection() { this(new Random()); } public RandomCollection(Random random) { this.random = random; } //Add an item to the collection with its weight public RandomCollection<E> add(double weight, E result) { if (weight <= 0) return this; total += weight; map.put(total, result); return this; } //Select a random item based on weights public E next() { double value = random.nextDouble() * total; return map.higherEntry(value).getValue(); } }
为了演示,让我们使用动物权重创建并填充 RandomCollection:
RandomCollection<String> rc = new RandomCollection<>(); rc.add(40, "dog") .add(35, "cat") .add(25, "horse");
现在,我们可以重复调用 next() 方法来根据分配的动物来选择动物权重:
for (int i = 0; i < 10; i++) { System.out.println(rc.next()); }
此代码将生成一系列动物名称,并选择与其体重成比例的每种动物的概率。通过利用 NavigableMaps 和随机性的强大功能,我们可以在 Java 中有效地实现加权随机选择,从而允许基于预定义概率的有偏差的结果。
以上是如何使用 NavigableMaps 在 Java 中实现加权随机选择?的详细内容。更多信息请关注PHP中文网其他相关文章!