Na verdade, a maioria dos computadores digitais domésticos atuais não geram números
aleatórios. O que estes computadores fazem é usar um algoritmo para produzir números (denominados pseudoaleatórios)
que “simulam” o comportamento de números aleatórios. Já existem no mercado
equipamentos que, através de fenômenos físicos,
procuram gerar números “mais aleatórios”. Contudo, estes equipamentos ainda são caros.
Mais ainda: definir o que se entende por um número ou evento aleatório é ainda uma questão polêmica,
sendo debatida por psicólogos, filósofos, matemáticos, físicos e cientistas da computação.
Por exemplo, você pode pensar que o lançamento de uma moeda honesta pode gerar um evento aleatório com
probabilidade “1/2” para cara e probabilidade “1/2” para coroa. Mas
o lançamento de uma moeda é um processo determinístico (complexo, mas ainda determinístico),
regido pelas leis da Física. De fato, o artigo
[Diaconis, Holmes, Montgomery, 2007]
descreve um experimento onde, através de um ajuste de velocidade inicial e momento angular, uma moeda
lançada por uma máquina sempre dá como resultado cara.
Para saber mais sobre as diferentes definições de aleatoriedade sugeridas atualmente, recomendamos os
excelentes artigos
[Volchan, 2002]
e
[Volchan, 2004]
Um dos algoritmos mais simples para se gerar números pseudoaleatórios (e ainda muito usado em vários programas de computador)
é o assim denominado gerador congruente linear (GCL), apresentado por D. H. Lehmer em 1949:
considere números inteiros m, a, c e s tais que m > 0, 0 ≤ a < m,
0 ≤ a < m e 0 ≤ s < m. Colocando x0 = s,
defina recursivamente para cada inteiro n ≥ 0:
xn + 1 = (a xn + c) mod m,
isto é, xn + 1 é o resto da divisão de
a xn + c por m. Por exemplo,
se m = 10, a = 11, c = 3 e x0 = s = 3,
então a x0 + c = 36.
Como o resto da divisão de 36 por 10 é 6, segue-se que x1 = 6.
Sendo assim, a x1 + c = 69.
Como o resto da divisão de 69 por 10 é 9, segue-se que x2 = 9.
Prosseguindo-se com este esquema, a partir do número x0 = 3,
geramos os números
x1 = 6,
x2 = 9,
x3 = 2,
x4 = 5,
x5 = 8,
x6 = 1,
x7 = 4,
x8 = 8,
x9 = 0,
x10 = 3.
Note que depois de x10, a sequência de números gerados se repete
(com período 10).
Com o aplicativo abaixo, você pode gerar números pseudoaleatórios usando o algoritmo GCL: indique os
valores das constantes m, a, c, s e, então, pressione sucessivamente o botão
“Próximo!” para calcular o próximo elemento da sequência.
O botão “Reiniciar!” reinicia a sequência de números pseudoaleatórios a partir
do primeiro termo.
|