Estoy trabajando en una generalización de la Min-Hash algoritmo para permitir la comparación significativa de los valores ordenados tales como los números enteros. El núcleo truco es usar determinista de la aleatoriedad como un reemplazo para los hash funciones.
Sin embargo, para obtener esta cosa para trabajar necesito una manera determinista de la muestra de una distribución discreta. I. e. si en repetidas ocasiones que la extracción de muestras de una distribución discreta necesito para obtener el mismo conjunto de valores para cada llamada.
Las funciones de la biblioteca como sample
de la lenguaR
uso estándar algoritmos de toma de muestras que suelen utilizar el uniforme de muestreo, a partir de la distribución acumulativa. Por lo tanto, necesitan algún tipo de números pseudo-aleatorios. Por la siembra y el restablecimiento de este generador de números aleatorios antes de cada llamada, es posible cortar la aleatoriedad y hacer las cosas determinista. sample
a continuación, se comporta como una función matemática.
Considere el siguiente ejemplo:
value: a b c d e f g h i j
prob: 0.070 0.0774 0.083 0.090 0.096 0.103 0.109 0.116 0.122 0.129
setSeed(1)
sample(value,5, prob, replace = TRUE)
>>> a, c, e, j, a
setSeed(1)
sample(value,5, prob, replace = TRUE)
>>> a, c, e, j, a
Sin embargo, en el caso de la distribución cambia un poco (he.e otro valor k
se inserta) los valores devueltos de estas estándar algoritmos de toma de muestras a cambiar drásticamente.
setSeed(1)
sample(value, 5, prob, replace = TRUE)
>>> a, c, e, j, a
insert('k')
>>> value: a b c d e f g h i j k
>>> prob: 0.062 0.068 0.073 0.079 0.085 0.090 0.096 0.102 0.107 0.113 0.119
setSeed(1)
sample(value,5, prob, replace = TRUE)
>>> b, d, f, k, b
Así, a pesar de la distribución cambia sólo ligeramente, el dibujado de la muestra cambiado ampliamente. Sin embargo, me gustaría ver un cambio menor, algo así como
>>> a, c, e, j, a <-- initial sample from initial density
>>> a, c, k, j, a <-- desired sample after small density change
>>> b, d, f, k, b <-- actual sample after small density change
Una lenta pero trabajando algoritmo sería para 'simular' este muestreo mediante el uso de 10.000 contenedores. Cada bandeja contiene un único "valor". El número de contenedores de un cierto valor corresponde a la probabilidad de que el valor en la distribución. Dibujo a partir de esta simulación, a continuación, obras de dibujo enteros i
de 1 a 10.000 y devolver el valor de la bandeja con número i
. Si los contenedores se sustituye con otro valor, el de la muestra cambia sólo ligeramente, debido a que en cada llamada de la misma contenedores de ser seleccionado.
Así que los problemas con algoritmos estándar, es decir, que por lo general de ordenación reorganizar estos contenedores para obtener la aceleración. Sin embargo, eso no es posible en ese caso.
Es allí una manera de ejemplo de la distribución de la densidad de sí mismo mientras se asegura de que el cambio en el dibujado de la muestra es similar al cambio de la distribución?