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.

[ Hits: 8.115 ]

Por: Pablo Margreff em 25/06/2015 | Blog: https://pmargreff.wordpress.com/


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
Linux: Gerando Números Aleatórios
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
Linux: Gerando Números Aleatórios
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
Linux: Gerando Números Aleatórios
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:
Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Os primórdios
   3. Atualidade
Outros artigos deste autor

Aumentando sua produtividade com o teclado padrão Dvorak

Algoritmos de compressão

Manipulação de imagens no formato PPM

Leitura recomendada

Upload Seguro de Arquivos em Aplicação Backend com Spring Boot, ClamAV e JWT

Redirecionamento de páginas e domínios com Jetty Rewrite Handler

Java: Usando JInternalFrame de forma elegante

Máquina Virtual Java (Java Virtual Machine)

Java básico: Gravando em arquivos texto

  
Comentários
[1] Comentário enviado por albfneto em 25/06/2015 - 12:44h

é excelente esse artigo. favoritado!
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: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].

[2] Comentário enviado por pmargreff em 25/06/2015 - 15:58h


[1] Comentário enviado por albfneto em 25/06/2015 - 12:44h

é excelente esse artigo. favoritado!
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á existentem para gerar números aleatórios.
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Boa sugestão, talvez agora nas férias isso aconteça.

[3] Comentário enviado por viana3 em 26/06/2015 - 20:44h


Muito interessante o artigo, poderia ter exibido alguns códigos geradores de números aleatórios. Outra dica seria o uso desses geradores no Método de Monte Carlo.

[4] Comentário enviado por removido em 29/06/2015 - 01:23h

O algoritmo Rho-Pollard também gera uns aleatórios, exceto por uma característica cíclica que o transforma em um fatorador.

--
http://s.glbimg.com/po/tt/f/original/2011/10/20/a97264_w8.jpg

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Contribuir com comentário