¿Cómo generar números distribuidos Zipf de manera eficiente?

Actualmente estoy comparando algunas estructuras de datos en C ++ y quiero probarlas cuando trabajo en números distribuidos por Zipf.

Estoy usando el generador proporcionado en este sitio:http: //www.cse.usf.edu/~christen/tools/toolpage.htm

dapté la implementación para usar un generador Mersenne Twister.

Funciona bien pero es muy lento. En mi caso, el rango puede ser grande (aproximadamente un millón) y la cantidad de números aleatorios que se generan puede ser de varios millones.

El parámetro alfa no cambia con el tiempo, es fijo.

Intenté precacular todos los sum_prob. Es mucho más rápido, pero aún se ralentiza a gran distancia.

¿Existe una forma más rápida de generar números distribuidos Zipf? Incluso algo menos preciso será bienvenido.

Gracia

Respuestas a la pregunta(8)

Su respuesta a la pregunta