Números Aleatórios

Você já parou para pensar como um computador, ou um algoritmo (sequência de operações), é capaz de criar números aleatórios? Como algo completamente lógico consegue criar algo totalmente aleatório?
Existem duas formas de se obter números aleatórios. A primeira forma é utilizando algum mecanismo de medição de fenômenos naturais completamente aleatórios. Radiação, por exemplo. Utilizando um contador Geiger (medidor de radiação), pode-se medir o decaimento radioativo de algum material e, já que este processo é completamente aleatório, o contador conseguirá gerar números puramente aleatórios também.

Como você pode imaginar, este processo não é nada prático. Portanto, na indústria e de modo geral, utiliza-se outra abordagem para gerar números aleatórios.
Pode-se desenvolver uma fórmula geradora de números pseudoaleatórios. Isso significa uma fórmula que gere números aparentemente aleatórios para aqueles que não sabem a lógica da fórmula.

Uma boa fórmula possui as seguintes características:

  • Sem repetição – para que a sequência numérica evite se repetir;
  • Falta de previsibilidade – impossibilidade de prever o próximo número, a menos que se saiba a lógica da fórmula;
  • Boa distribuição – se tivermos números aleatórios de 0 a 100, o número de 0s será parecido com o de 1s e 2s e assim sucessivamente, até 100, em um longo período de tempo.

É importante notar que toda fórmula de geração de números aleatórios depende de uma semente inicial. Semente é o número que será transformado pela fórmula em números aleatórios. Por exemplo, observe o procedimento abaixo:

número_aleatório =  7 * semente mod(11)

Pode parecer complicado, mas o procedimento é bem simples: escolha a semente, multiplique por 7 e encontre o resto da divisão por 11 deste número (a função “mod” representa “resto da divisão por”). Depois, basta utilizar o resultado obtido como uma nova semente. Vamos analisar o exemplo para entender melhor. Supondo que a semente inicial seja 2:

número_aleatório = 7 * 2 mod(11)
número_aleatório = 14 mod(11)
número aleatório = 3

Como 14 dividido por 11 é igual a 1, o resto da divisão é 3. É justamente ele que queremos.

A partir desta primeira iteração, geramos um número aleatório (3) a partir de uma semente (2). Podemos continuar o procedimento para obter uma sequência de números, utilizando sempre o resultado anterior como semente do próximo:

número_aleatório = 7 * 3 mod(11)
número_aleatório = 21 mod (11)
número_aleatório = 10

No exemplo acima, 21 dividido por 11 é igual a 1 e o resto é 10. Faremos mais uma vez, agora utilizando 10 como semente:

número_aleatório = 7 * 10 mod(11)
número_aleatório = 70 mod(11)
número_aleatório = 4

Neste exemplo, 70 dividido por 11 dá 6 e o resto da divisão é 4. Portanto, obtivemos a seguinte sequência inicial:

2, 3, 10, 4

Observe que a sequência mudaria completamente se tivéssemos começado com outra semente. Observe, também, que este algoritmo gera números aleatórios de 0 a 10 apenas, já que utiliza o resto da divisão por 11 (que, por definição, é no máximo 10).

Uma última observação interessante é a seguinte: dependendo da lógica de construção da sequência de números aleatórios que foi utilizada, basta saber a regra (ou fórmula) e a semente inicial para que se consiga reproduzir toda a sequência gerada.

Isso é extremamente importante em casos corporativos. Por exemplo: uma empresa utiliza determinada regra “aleatória” para sortear clientes. Algum cliente processa a empresa afirmando que o processo é enviesado, e que na verdade a empresa de certa forma escolhe os números. Neste contexto, é fundamental que a empresa consiga demonstrar que os números são sim aleatórios (ou, no caso, pseudoaleatórios).

Números Aleatórios

Share Button
9 Comments

Add a Comment

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *