J'ai un besoin dans mon projet .net où je dois sélectionner un élément d'une collection, chaque élément a un poids (entier de 1 à 10) qui lui est assigné. J'ai besoin d'un générateur aléatoire qui prendrait ce poids en considération, c'est-à-dire, plus le poids est élevé, plus il y a de chances que l'objet soit sélectionné. Tous les exemples de code dans .net sont appréciés, bien que la description de l'algorithme soit agréable aussi.J'ai besoin d'un algorithme aléatoire avec des options de pesage en .net
Editer: Copier/coller rapidement le code C# au cas où quelqu'un trébucherait dessus.
class RandomWeightedSelector<T>
{
private List<T> items = new List<T>();
public void Add(T item, uint weight = 1)
{
for (int i = 0; i < weight; i++)
items.Add(item);
}
public T GetRandom()
{
return items[new Random().Next(0, items.Count)];
}
}
Vous ne voulez pas être la création d'un nouveau chaque appel aléatoire 'GetRandom'. Le constructeur par défaut de 'Random' ensemence le générateur avec le temps de fonctionnement du système en millisecondes. Si vous appelez votre 'GetRandom' plus d'une fois par milliseconde, vous obtiendrez la même valeur. Même si vous ne le faites pas, vous pourriez renvoyer des résultats qui ont un «caractère aléatoire» pire que de simplement réutiliser une seule instance de 'Random'. – Dolphin