Maison  >  Article  >  Java  >  Comment implémenter la sélection aléatoire pondérée en Java ?

Comment implémenter la sélection aléatoire pondérée en Java ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-08 08:05:01217parcourir

How to Implement Weighted Random Selection in Java?

Sélection aléatoire pondérée en Java

Lors de la sélection d'un élément dans un ensemble, il est souvent souhaitable d'attribuer différentes probabilités à différents éléments. Cette méthode est connue sous le nom de sélection aléatoire pondérée.

Considérez le scénario suivant dans lequel vous disposez d'une collection d'éléments avec des poids associés :

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

Dans ce cas, le poids représente la probabilité de sélection cet article. Par exemple, vous avez 10 fois plus de chances d'obtenir l'épée de misère que l'épée à triple tranchant.

Pour implémenter une sélection aléatoire pondérée en Java, nous pouvons utiliser une 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();
    }
}

Utilisation :

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

Ce code montre comment ajouter des éléments avec des poids spécifiques à la collection, puis sélectionner des éléments aléatoires en fonction des probabilités qui leur sont attribuées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn