Tengo un requisito en mi proyecto .net donde tengo que seleccionar un elemento de una colección, cada elemento tiene un peso (número entero de 1 a 10) asignado a él. Necesito un generador aleatorio que tenga en cuenta este peso, es decir, cuanto mayor sea el peso, mayores serán las posibilidades de que se seleccione el objeto. Se aprecian los ejemplos de código en .net, aunque la descripción del algoritmo también es agradable.Necesito algoritmo aleatorio con opciones de pesaje en .net
Editar: copia rápida/pega código C# en caso de que alguien se tropiece con esto.
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)];
}
}
Usted no quiere ser la creación de un nuevo aleatoria cada llamada a 'GetRandom'. El constructor predeterminado para 'Random' siembra el generador con el tiempo de actividad del sistema en milisegundos. Si llama a su 'GetRandom' más de una vez por milisegundo, se le devolverá el mismo valor. Incluso si no lo hace, podría estar devolviendo resultados que tienen peor 'aleatoriedad' que simplemente reutilizar una sola instancia 'Random'. – Dolphin