Estoy asumiendo que almacene las frecuencias como números de punto flotante entre 0 y 1 que suman para hacer 1.
Primero debe preparar una tabla de frecuencias acumulativas, es decir, la suma de la frecuencia de esa letra y todas las letras anteriores.
Para simplificar, si se inicia con esta distribución de frecuencias:
A 0.1
B 0.3
C 0.4
D 0.2
Su tabla de frecuencia acumulativa sería:
A 0.1
B 0.4 (= 0.1 + 0.3)
C 0.8 (= 0.1 + 0.3 + 0.4)
D 1.0 (= 0.1 + 0.3 + 0.4 + 0.2)
Ahora generar un número aleatorio entre 0 y 1 y ver donde en este enumera ese número miente. Elija la letra que tenga la frecuencia acumulativa más pequeña más grande que su número aleatorio. Algunos ejemplos:
Digamos que elige al azar 0.612. Esta se encuentra entre 0,4 y 0,8, es decir, entre B y C, por lo que elegiría C.
Si su número al azar fue 0,039, lo que viene antes de 0,1, es decir, antes de que A, así que elige A.
espero ¡eso tiene sentido, de lo contrario no dude en pedir aclaraciones!
víctima de http://stackoverflow.com/questions/2073235/random-weighted-choice y muchos otros (búsqueda "generación aleatoria ponderada") –
@Eli: Lo sentimos - no se dio cuenta de su nombre. –
'fEnglish = new [] {8.167f, 1.492f, 2.782f, 4.253f, 12.702f, 2.228f, 2.015f, 6.094f, 6.966f, 0.153f, 0.772f, 4.025f, 2.406f, 6.749f , 7.507f, 1.929f, 0.095f, 5.987f, 6.327f, 9.056f, 2.758f, 0.978f, 2.361f, 0.150f, 1.974f, 0.074f}; ' y luego ... – Fattie