Módulo 5 · Probabilidade e estatística
Fundamentos e o paradoxo do aniversário
Aula 5.1 · cerca de 18 minutos
Um espaço amostral Ω é o conjunto de resultados possíveis. Um evento é um subconjunto de Ω. Com resultados equiprováveis, P(A) = |A| / |Ω|: probabilidade vira contagem.
P(A ∪ B) = P(A) + P(B) − P(A ∩ B) P(não A) = 1 − P(A) Independentes: P(A ∩ B) = P(A)·P(B)
Paradoxo do aniversário
Quantas pessoas são necessárias para que duas façam aniversário no mesmo dia com probabilidade > 50%? Só 23. É mais fácil calcular o complemento, a chance de todos serem diferentes:
P(sem colisão) = (365/365)·(364/365)·…·((365−n+1)/365) ≈ e^(−n²/(2·365)) Em geral, com N valores possíveis, colisões aparecem por volta de n ≈ √N.
É por isso que um hash de 64 bits começa a colidir perto de 2³² ≈ 4 bilhões de itens, e não de 2⁶⁴. Também é por isso que UUIDv4 usa 122 bits aleatórios.
import random
def simula(n, dias=365, testes=100_000):
colisoes = 0
for _ in range(testes):
vistos = set()
for _ in range(n):
d = random.randrange(dias)
if d in vistos:
colisoes += 1
break
vistos.add(d)
return colisoes / testes
print(simula(23)) # ≈ 0.507Dica: Quando o cálculo exato ficar difícil, simule com Monte Carlo. 100 mil repetições dão cerca de 2 casas decimais de precisão.
Exercício 1
Você gera IDs aleatórios de 32 bits. Com cerca de quantos IDs a chance de colisão chega perto de 50%?