Как эффективно генерировать распределенные числа Zipf?

В настоящее время я тестирую некоторые структуры данных в C ++ и хочу проверить их при работе с числами, распределенными по Zipf.

Я использую генератор, представленный на этом сайте:http://www.cse.usf.edu/~christen/tools/toolpage.html

Я адаптировал реализацию, чтобы использовать генератор Mersenne Twister.

Это работает хорошо, но это действительно медленно. В моем случае диапазон может быть большим (около миллиона), а число генерируемых случайных чисел может составлять несколько миллионов.

Альфа-параметр не меняется со временем, он фиксированный.

Я попытался предварительно просуммировать все sum_prob. Это намного быстрее, но все еще замедляется на большом расстоянии.

Существует ли более быстрый способ генерирования распределенных чисел Zipf? Будет приветствоваться даже что-то менее точное.

Спасибо

Ответы на вопрос(4)

Ваш ответ на вопрос