Gerando Números Aleatórios
Esse artigo pretende introduzir o funcionamento e os tipos de algoritmos que fazem a geração de números randômicos.
Parte 2: Os primórdios
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.
Exemplo (número aleatório de três dígitos):
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.
Estes algoritmos dificilmente são implementados hoje em dia pela sua previsibilidade alta.
Fontes:
- Sistema Galileu de Educação Estatística
- http://www.feferraz.net/files_/lista/random_numbers.pdf
- Revista programar edições 31 e 32, Geração de números aleatórios por Augusto Manzano
se ainda houvessem notas para os artigos, 10 para esse!
Não sou da área, mas fica uma sugestão.
em um segundo artigo, se tiver tempo, revise, teste e classifique diversos
pacotes já existentes para gerar números aleatórios.
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva.