Extraia de uma distribuição de probabilidade não uniforme

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:

  1. Um gerador de números aleatórios (digamos para desenhar ∈ [0,100 [)Random(0, 100)
  2. Uma matriz / vetor contendo a probabilidade de cada classe da qual você deseja retirar (digamos P)
  3. Para garantir essa Psoma ao máximo (aqui 100)

Agora temos que cumsum Ppara 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, ifica a turma sorteada.

Espero que esta ajuda!