Maison > Java > javaDidacticiel > 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
Libérer: 2024-11-08 08:05:01
original
335 Les gens l'ont consulté

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();
    }
}
Copier après la connexion

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());
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal