c++ - randomize - srand php
std:: random_shuffle produce el mismo resultado aunque srand(time(0)) llamó una vez (1)
random_shuffle()
no está especificado para usar rand()
y entonces srand()
puede no tener ningún impacto. Si quiere estar seguro, debe usar uno de los formularios C ++ 11, random_shuffle(b, e, RNG)
o shuffle(b, e, uRNG)
.
Una alternativa sería usar random_shuffle(indices.begin(), indices.end(), rand());
porque aparentemente su implementación de random_shuffle()
no está usando rand()
.
En una función, quiero generar una lista de números dentro del rango: (Esta función se ejecutará solo una vez cuando se ejecute el programa).
void DataSet::finalize(double trainPercent, bool genValidData)
{
srand(time(0));
printf("%d/n", rand());
// indices = {0, 1, 2, 3, 4, ..., m_train.size()-1}
vector<size_t> indices(m_train.size());
for (size_t i = 0; i < indices.size(); i++)
indices[i] = i;
random_shuffle(indices.begin(), indices.end());
// Output
for (size_t i = 0; i < 10; i++)
printf("%ld ", indices[i]);
puts("");
}
Los resultados son como:
850577673
246 239 7 102 41 201 288 23 1 237
Después de unos segundos:
856981140
246 239 7 102 41 201 288 23 1 237
Y más:
857552578
246 239 7 102 41 201 288 23 1 237
¿Por qué la función rand()
funciona correctamente pero `random_shuffle ''no funciona?