Suponha que eu esteja usando um gerador de números pseudo-aleatórios lineares congruentes (PRNG). Dada uma semente , o fator multiplicador (a), o fator de deslocamento (c) e o fator de módulo (m), como posso determinar o período do meu PRNG? Eu o determino por algoritmos de detecção de experimentação / padrão ou existe uma fórmula direta para calcular seu período?
Embora minha pergunta seja especificamente sobre o método congruencial linear, estou aberto a saber mais sobre como os períodos são calculados na prática para outros PRNGs também.
Respostas:
Se você se restringir ao ciclo completo de LCG PRNG s, a resposta é fácil, por definição é simplesmentem .
Para encontrar o período de um LCN PRNG de ciclo não completo para uma determinada semente, basta contar o número de iterações do PRNG até gerar o valor da semente mais uma vez.
Na página da wikipedia mencionada :
Por que você deseja usar um gerador de ciclo completo
Se você não se restringe ao ciclo completo de PRNGs de LCG, está correndo um risco enorme .
Se você não sabe que um determinado LCG é um ciclo completo, pode acabar com um gerador com um número arbitrário de seqüências mutuamente distintas, algumas das quais podem ser embaraçosamente pequenas e com uma aleatoriedade assustadora, possivelmente ainda pior do que o infame RANDU gerador .
Você realmente não precisa verificar todos os valores possíveis para garantir que ele gere uma sequência que seja longa o suficiente para o seu aplicativo.
Leitura adicional
Para um excelente iniciador em geradores de números pseudo-aleatórios, recomendo fortemente que você leia o capítulo Receitas Numéricas sobre Números Aleatórios.
fonte