Angenommen, ich verwende einen linearen kongruenten Pseudozufallszahlengenerator (PRNG). Wie kann ich bei gegebenem Startwert , Multiplikationsfaktor (a), Verschiebungsfaktor (c) und Modulfaktor (m) die Periode meines PRNG bestimmen? Ermittle ich es durch Experimentier- / Mustererkennungsalgorithmen, oder gibt es eine direkte Formel zur Berechnung seiner Periode?
Obwohl meine Frage speziell die lineare Kongruenzmethode betrifft, bin ich offen dafür, mehr darüber zu erfahren, wie Perioden in der Praxis auch für andere PRNG berechnet werden.
Antworten:
Wenn Sie sich auf LCG- PRNGs mit vollem Zyklus beschränken, ist die Antwort per Definition einfach m .m
Um den Zeitraum eines nicht vollständigen LCG-PRNG-Zyklus für einen bestimmten Startwert zu ermitteln, müssen Sie nur die Anzahl der Iterationen des PRNG zählen, bis der Startwert erneut generiert wird.
Von der referenzierten Wikipedia-Seite :
Warum Sie einen Vollzyklusgenerator verwenden möchten
Wenn Sie sich nicht auf LCG-PRNGs mit vollem Zyklus beschränken, gehen Sie ein großes Risiko ein .
Wenn Sie nicht wissen, dass eine bestimmte LCG einen vollständigen Zyklus hat, könnten Sie einen Generator mit einer beliebigen Anzahl von voneinander verschiedenen Sequenzen erhalten, von denen einige peinlich klein und schrecklich zufällig sein können, möglicherweise sogar noch schlimmer als der berüchtigte RANDU- Generator .
Sie möchten wirklich nicht jeden möglichen Startwert überprüfen müssen, um sicherzustellen, dass er eine Sequenz generiert, die für Ihre Anwendung lang genug ist.
Weitere Lektüre
Für eine exzellente Einführung in Pseudozufallszahlengeneratoren empfehle ich dringend, das Kapitel Numerische Rezepte über Zufallszahlen zu lesen .
quelle