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: 9.287 ]

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


Atualidade



Hoje em dia o que é usado para a aleatorização de números é o método congruente linear, na maioria das vezes uma variância, mas sempre se baseando no método principal. Foi desenvolvido em 1951 pelo professor Derrick Henry Lehmer, ele acreditava que o restos de sucessivas potências de um número gerariam bons números aleatórios.

Traduzindo para linguagem de nerds.
Linux: Gerando Números Aleatórios
Explicando a linguagem dos nerds:
  • Escolha um número 'a' e o eleve na 'n' potência
  • Divida por 'm'
  • O que sobrar disso será seu número aleatório(x)

Como se pode imaginar o "range" dos números sempre irá até 'm - 1' pelo fato do resto nunca ser maior que o dividendo. Para tentar distribuir as coisas um pouquinho mais, há uma formula construída a partir da seguinte variação do método de Lehmer.
Linux: Gerando Números Aleatórios
Exemplo:
Linux: Gerando Números Aleatórios
Exemplo copiado do material de Criston Pereira de Souza, página 2, índice 29.

Para garantir eficiência de computabilidade para a fórmula adota-se a seguinte regra:
  • M tem que ser uma potência de 2, desta maneira podemos gera-lo apenas deslocando bits à esquerda.

E a terceira e mais otimizada fórmula, chamada de método do congruente linear multiplicativo:
Linux: Gerando Números Aleatórios
Além de herdar as características das anteriores não usa-se adições, o que diminui mas uma parcela de tempo de computação.

Segurança: como referenciado no início do artigo, um dos pontos mais importantes pela natureza das implementações é a segurança, e não é diferente no método do Congruente Linear, para garantir a segurança temos que tomar tais medidas:
  • Não deve haver arredondamentos em momento algum
  • Tratar possíveis overflows
  • Não permitir que a multiplicação a * x ultrapasse o número de bits da arquitetura implementada

Fontes: Introdução à Modelagem e Simulação de Sistemas com Aplicações Arena. Freitas Filho, Paulo José, cap 3, segunda edição.

Considerações finais

Nas páginas anteriores pudemos ver um pouco de como funcionam os algoritmos para gerar os números através do método pseudo random, em um futuro próximo irei escrever como o método True Random gera um número a partir de fenômenos que não são digitais, mas sim físicos.

Fique a vontade para acrescentar qualquer coisa interessante ou correção a partir dos comentários e/ou me contatar no email: pablo_margreff@hotmail.com (HOTMAIL, isso mesmo).

Abraço.

Página anterior    

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

Algoritmos de compressão

Manipulação de imagens no formato PPM

Aumentando sua produtividade com o teclado padrão Dvorak

Leitura recomendada

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

Certificação Java - 1 - Java Programming Language Keywords (Exam Objective 4.4)

Desenvolvendo aplicações em J2ME no Linux

Introdução ao Swing (parte 1)

Programação orientada a objetos e o Java (parte 2)

  
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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts