Yo tuve el mismo problema. Dado un conjunto en el que cada elemento tiene una probabilidad y cuyas probabilidades de los elementos suman uno, quería dibujar una muestra de manera eficiente, es decir, sin clasificar nada y sin repetir repetidamente sobre el conjunto .
La siguiente función dibuja el más bajo de números aleatorios distribuidos uniformemente dentro del intervalo [ a , 1 ) . Sea r un número aleatorio de [ 0 , 1 ) .norte[ a , 1)r[ 0 , 1 )
siguiente (N, a ) = 1 - ( 1 - a ) ⋅ r√norte
Puede utilizar esta función para dibujar una serie ascendente de N números aleatorios distribuidos uniformemente en [0,1]. Aquí hay un ejemplo con N = 10 :( ayo)nortenorte= 10
una0 0= siguiente ( 10 , 0 )
una1= siguiente ( 9 , a0 0)
una2= siguiente ( 8 , a1)
...
una9= siguiente ( 1 , a8)
( ayo)PAGS0 ≤ k < | PAGSEl |pagsk∈ Punayok∑p0…pk>aipkai+1
{(1,0.04),(2,0.5),(3,0.46)}N=10
i a_i k Sum Draw
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
(1,2,2,2,2,3,3,3,3,3)
nextN[a,x)x≤1