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 :
Periodenlänge
Die Periode einer allgemeinen LCG beträgt höchstens m , und für einige Entscheidungen viel weniger. Vorausgesetzt, dass c ungleich Null ist, hat die LCG einen vollständigen Zeitraum für alle Startwerte, und zwar genau dann, wenn :
- c undm sindrelativ prim,
- a - 1 ist teilbar durch allePrimfaktorenvonm
- a - 1 ist ein Vielfaches von 4, wennm ein Vielfaches von 4 ist.
Während LCGs in der Lage sind, anständige Pseudozufallszahlen zu erzeugen , ist dies äußerst empfindlich für die Wahl der Parameter c , m und ein .
In der Vergangenheit hatten schlechte Entscheidungen zu ineffektiven Implementierungen von LCGs geführt. Ein besonders anschauliches Beispiel hierfür ist RANDU, das in den frühen 1970er Jahren weit verbreitet war und zu vielen Ergebnissen führte, die derzeit aufgrund der Verwendung dieses schlechten LCG in Frage gestellt werden.
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 .