Home > Java > javaTutorial > How to Implement Weighted Random Selection in Java?

How to Implement Weighted Random Selection in Java?

Patricia Arquette
Release: 2024-11-08 08:05:01
Original
390 people have browsed it

How to Implement Weighted Random Selection in Java?

Weighted Random Selection in Java

When selecting an item from a set, it's often desirable to assign different probabilities to different items. This method is known as weighted random selection.

Consider the following scenario where you have a collection of items with associated weights:

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

In this case, the weight represents the likelihood of selecting that item. For example, you are 10 times more likely to obtain the Sword of Misery than the Triple-Edged Sword.

To implement weighted random selection in Java, we can employ a 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();
    }
}
Copy after login

Usage:

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());
}
Copy after login

This code demonstrates how to add items with specific weights to the collection and then select random items based on their assigned probabilities.

The above is the detailed content of How to Implement Weighted Random Selection in Java?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template