A dica de hoje é sobre como desenhar um número de uma distribuição não uniforme, simulando-o com um uniforme (básico).
Usarei probabilidades inteiras de% age, mas é facilmente extensÃvel para reais ∈ [0,1].
Você precisa:
- Um gerador de números aleatórios (digamos para desenhar ∈ [0,100 [)
Random(0, 100)
- Uma matriz / vetor contendo a probabilidade de cada classe da qual você deseja retirar (digamos
P
) - Para garantir essa
P
soma ao máximo (aqui 100)
Agora temos que cumsum P
para calcular o intervalo de probabilidade de cada classe e desenhar um número para obter a classe:
int cumsum = P[0], i = 0, r;
while( cumsum <= Random(0,100) ) {
i++;
cumsum += P[i];
}
Ao final, i
fica a turma sorteada.
Espero que esta ajuda!