Misalkan saya menggunakan generator nomor semu kongruen-acak (PRNG). Diberikan seed , faktor pengali (a), faktor shift (c) dan faktor modulus (m), bagaimana saya bisa menentukan periode PRNG saya? Apakah saya menentukannya dengan eksperimen / algoritma deteksi pola, atau adakah formula langsung untuk menghitung periodenya?
Meskipun pertanyaan saya secara khusus tentang metode linear kongruensial, saya terbuka untuk mengetahui lebih banyak tentang bagaimana periode dihitung dalam praktek untuk PRNG lain juga.
Jawaban:
Jika Anda membatasi diri Anda untuk siklus penuh LCG PRNG maka jawabannya mudah, menurut definisi itu hanyam .
Untuk menemukan periode non-siklus LCG PRNG untuk benih yang diberikan Anda hanya perlu menghitung jumlah iterasi dari PRNG sampai menghasilkan nilai benih sekali lagi.
Dari halaman wikipedia yang dirujuk :
Mengapa Anda ingin menggunakan generator siklus penuh
Jika Anda tidak membatasi diri untuk siklus penuh LCG PRNG maka Anda mengambil risiko besar .
Jika kamu tidak tahu bahwa LCG yang diberikan adalah siklus penuh maka Anda bisa berakhir dengan generator dengan jumlah urutan berbeda yang sewenang-wenang, beberapa di antaranya bisa sangat memalukan dan memiliki keacakan yang mengerikan, bahkan mungkin lebih buruk daripada generator RANDU yang terkenal itu. .
Anda benar-benar tidak ingin harus memeriksa setiap nilai seed yang mungkin untuk memastikan bahwa ia menghasilkan urutan yang cukup lama untuk aplikasi Anda.
Bacaan lebih lanjut
Untuk primer yang sangat baik pada generator angka acak pseudo, saya akan sangat menyarankan Anda membaca bab Resep Numerik pada Angka Acak.
sumber