Tengo una lista de 100.000 objetos. Cada elemento de lista tiene un "peso" asociado a él que es un int positivo de 1 a N.Selección aleatoria de un elemento de una lista ponderada
¿Cuál es la forma más eficiente de seleccionar un elemento aleatorio de la lista? Quiero el comportamiento de que mi distribución de elementos elegidos al azar sea la misma que la distribución de los pesos en la lista.
Por ejemplo, si tengo una lista L = {1,1,2,5}, quiero que el 4º elemento se seleccione 5/9 de las veces, en promedio.
Supongamos inserciones y eliminaciones son comunes en esta lista, por lo que cualquier método que utiliza "tablas de área integrales" tendría que ser actualizado con frecuencia - la esperanza no es una solución con O (1) tiempo de ejecución y O (1) de memoria extra que se requiere.
posible repetición de http://stackoverflow.com/questions/2140787/select-random-k-elements-from-a-list-whose- elements-have-weights – user470379
@ user470379 Esto es diferente ya que los pesos son 1, 2, ..., N. – marcog
@ user470379, creo que el requisito para admitir la inserción y eliminación lo distingue. – jonderry