Eu tive o mesmo problema. Dado um conjunto em que cada item tem uma probabilidade e cujas probabilidades somam um, eu queria desenhar uma amostra com eficiência, ou seja, sem classificar nada e sem repetir a iteração sobre o conjunto .
A função a seguir desenha o menor de números aleatórios distribuídos uniformemente dentro do intervalo [ a , 1 ) . Seja r um número aleatório entre [ 0 , 1 ) .N[ a , 1 )r[ 0 , 1 )
próximo ( N, a ) = 1 - ( 1 - a ) ⋅ r√N
( umEu)NN= 10
a 1 = próximo ( 9 , a 0uma0 0= próximo ( 10 , 0 )
uma1= próximo ( 9 , a0 0)
uma2= próximo ( 8 , a1)
...
uma9= próximo ( 1 , a8)
( umEu)P0 ≤ k < | P|pk∈ PumaEuk∑ p0 0... pk> aEupkumai + 1
{ ( 1 , 0,04 ) , ( 2 , 0,5 ) , ( 3 , 0,46 ) }N= 10
i a_i k Sorteio
0 0,031 0 0,04 1
1 0,200 1 0,54 2
2 0,236 1 0,54 2
3 0,402 1 0,54 2
4 0,488 1 0,54 2
5 0,589 2 1,0 3
6 0,625 2 1,0 3
7 0,638 2 1,0 3
8 0,738 2 1,0 3
9 0,942 2 1,0 3
Amostra: ( 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 )
PróximoN[ a , x )x ≤ 1