Tengo un vector que contiene n
elementos. Necesito elegir un subconjunto de m
elementos aleatoriamente del vector sin repetición. ¿Cuál es la forma más eficiente de hacer esto? Necesito hacer esto varias miles de veces en mi código.Elige m elementos al azar de un vector que contiene n elementos
La solución en la parte superior de la cabeza es utilizar rand()
para generar un número aleatorio entre k
0
y n
. A continuación, elija el elemento k
en el vector e insértelo en un std::set
. Siga haciendo esto hasta que el tamaño del conjunto sea igual a m
. Ahora estoy seguro de que el conjunto contiene m
elementos únicos elegidos al azar del conjunto de elementos n
.
¿Cuáles son las otras soluciones posibles?
Gracias.
hacer en 'std: : random_shuffle() 'en el vector y extraer los primeros elementos' m', tal vez? – jrok
@jrok: aunque es simple, eso es muy poco eficiente cuando 'm' es mucho más pequeño que' n'. –
posible duplicado de [Algoritmo para seleccionar una sola combinación aleatoria de valores?] (Http://stackoverflow.com/questions/2394246/algorithm-to-select-a-single-random-combination-of-values) –