2016-02-06 5 views
3

Я использую random_shuffle в последовательности a 1000 раз. Я хочу, чтобы на каждом компьютере конечная последовательность была такой же. Это может показаться нежелательным, но все же я хочу достичь этого. Обеспечивает ли это srand(x)?сгенерируйте такую ​​же случайную перестановку на каждом компьютере

+3

Почему вы используете случайное перетасовку, если хотите, чтобы результат всегда был одинаковым? –

+1

Делает то же и случайное вместе? Будет интересно увидеть ответ :) – sami1592

+2

Да, если вы выберете одно и то же семя, вы получите ту же последовательность. –

ответ

3

Существует два источника различий в результате случайного перетасовки: алгоритм для rand() не указан, поэтому различные реализации производят разные последовательности чисел; и алгоритм для random_shuffle не указан, поэтому, опять же, разные реализации дают разные результаты, даже с той же последовательностью псевдослучайных чисел.

Вы можете устранить первую проблему, используя любые генераторы случайных чисел в C++ 11; все они подробно указаны, в том числе для некоторых специализаций - требование для 10 000-го значения, которое является отличной помощью в отладке их реализации. Однако для перетасовки нет аналога. В частности, алгоритм для std::shuffle не указан, поэтому он не даст воспроизводимых результатов. Вам придется писать свои собственные. Это не сложно (нигде не так сложно, как писать движок), просто сделайте небольшое исследование; есть много дискуссий, которые вы можете начать с этого.

+0

Обычный алгоритм перетасовки - это [Fisher-Yates shuffle] (https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). – rossum

Смежные вопросы