Gerando Números Aleatórios [Artigo] - página 2
[ Hits: 8.115 ]
Método do meio quadrado
Sendo proposto por John von Neumann, esse foi o primeiro algoritmo para a geração de números aleatórios. Nesse método geramos um número de n dígitos, então pegamos uma semente com o mesmo tamanho de dígitos e à elevamos ao quadrado, depois pegamos os seus n dígitos centrais e também os elevamos ao quadrado, e continuamos repetindo o processo. Não existe problema em o número ter tamanho impar, basta fixarmos um lado para o corte.
Exemplo (número aleatório de três dígitos):
Semente - 358
E assim sucessivamente até quando se desejar.
Nesse método temos dois problemas, o primeiro é que a sequência se repete em intervalos não muito grandes. O segundo é que para alguns casos, se gerarmos o número "zero" para um dos números que irá compor a próxima semente os números irão se transformar em zero.
Semente - 384
Como essa solução é determinística toda vez que usarmos a mesma semente teremos o mesmo número. Porém como a semente não é visível ao usuário a sensação transmitida é de aleatoriedade. O tamanho máximo de dígitos para a semente deve ser de 5 dígitos para a valores de 32 bits ou 15 dígitos para valores de 64 bits.
Método do meio do produto
Esse método é parecido com o anterior, porém ao invés de usarmos uma semente iremos utilizar duas sementes de mesmo tamanho, e precisamos multiplicar essas sementes para obtermos um novo valor. Pegamos os n números centrais para gerar a nova semente, e multiplicamos com a semente anterior (na primeira iteração podemos escolher uma das duas sementes iniciais).
A diferença é que agora os dígitos usados precisam ser os centrais. Para sementes que tem tamanho impar, precisamos de tamanho total impar no resultado, e para sementes de tamanho par, precisamos de resultados de tamanho par, se isso não acontecer podemos adicionar zeros à esquerda.
Exemplo (número de quatro dígitos):
Sementes: 4984 e 9843
Este método é mais eficiente que ao anterior pelo fato de repetir os números gerados em uma regularidade muito menor.