Generieren Sie auf jedem Computer dieselbe zufällige Permutation
Ich benutze die random_shuffle
Sequenz a
1000 Mal. Ich möchte sicherstellen, dass auf jedem Computer die endgültige Reihenfolge gleich ist. Das mag unerwünscht aussehen, aber ich möchte es trotzdem erreichen. Stellt das srand(x)
sicher?
Es gibt zwei Ursachen für Unterschiede beim resultierenden Mischen: Der Algorithmus für rand()
ist nicht angegeben, sodass unterschiedliche Implementierungen unterschiedliche Zahlenfolgen erzeugen. und der Algorithmus für random_shuffle
ist nicht spezifiziert, so dass wiederum unterschiedliche Implementierungen unterschiedliche Ergebnisse erzeugen, selbst mit derselben Folge von Pseudozufallszahlen.
Sie können das erste Problem beheben, indem Sie einen der Zufallszahlengeneratoren in C ++ 11 verwenden. Sie sind alle detailliert spezifiziert, einschließlich für einige Spezialisierungen eine Anforderung für den 10.000sten Wert, was eine große Hilfe beim Debuggen ihrer Implementierung ist. Es gibt jedoch kein Analogon zum Mischen. Insbesondere ist der Algorithmus für std::shuffle
nicht angegeben, sodass keine reproduzierbaren Ergebnisse erzielt werden. Du musst deine eigenen schreiben. Das ist nicht schwierig (bei weitem nicht so schwierig wie das Schreiben eines Motors), recherchieren Sie einfach ein wenig. Es gibt viele Diskussionen, von denen Sie ausgehen können.