Ho un vettore contenente elementi n
. Devo scegliere un sottoinsieme di elementi m
in modo casuale dal vettore senza ripetizione. Qual è il modo più efficace per farlo? Ho bisogno di farlo diverse migliaia di volte nel mio codice.Scegli m elementi in modo casuale da un vettore contenente n elementi
La soluzione in cima alla mia mente è quello di utilizzare rand()
per generare un numero casuale tra k
0
e n
. Quindi seleziona l'elemento nel vettore e inseriscilo in un std::set
. Continuate a farlo fino a quando le dimensioni del set diventano uguali a m
. Ora ho la certezza che il set contiene m
elementi unici scelti casualmente dal set di elementi n
.
Quali sono le altre soluzioni possibili?
Grazie.
Fare 'std: : random_shuffle() 'sul vettore e tira fuori i primi elementi' m', forse? – jrok
@jrok: mentre semplice, è _ notevolmente inefficiente quando 'm' è molto più piccolo di' n'. –
possibile duplicato di [Algoritmo per selezionare una singola combinazione casuale di valori?] (Http://stackoverflow.com/questions/2394246/algorithm-to-select-a-single-random-combination-of-values) –