хеширование небольшого числа в случайное 64-битное целое число

Я ищу хеш-функцию, которая работает с небольшим целым числом (скажем, в диапазоне 0 ... 1000) и выводит 64-битный int.

Набор результатов должен выглядеть как случайное распределение 64-битных целых чисел: равномерное распределение без линейной корреляции между результатами.

Я надеялся на функцию, для выполнения которой требуется всего несколько циклов процессора. (код будет на C ++).

Я подумал о умножении входных данных на большое простое число и взятии по модулю 2 ** 64 (что-то вроде линейного конгруэнтного генератора), но между выходами есть очевидные зависимости (в младших битах).

Поиск в Google ничего не дал, но я, вероятно, использую неправильные условия поиска.

Существует ли такая функция?


Некоторая справочная информация:

Я не хочу использовать в алгоритме большую постоянную таблицу с псевдослучайными числами и вычислять случайные числа на лету.

Безопасность не проблема.

6
задан mirk 14 December 2011 в 17:45
поделиться