У меня много целых чисел в диапазоне [0; 2 ^ 63-1]. Однако есть только 10 ^ 8 целых чисел. нет дубликатов . Полный список известен во время компиляции, но это просто уникальные случайные числа . Эти цифры никогда не меняются .
Чтобы хранить одно целое число в явном виде , требуется 8 байт, и есть соответствующие 1-байтовые значения, поэтому для явного хранения требуется около 860 МБ.
Поэтому я хочу найти минимальную идеальную хеш-функцию для отображения каждого из 10 ^ 8 целых чисел из [0; 2 ^ 63-1] в [0; 10 ^ 8-1]. Я должен найти эту функцию только один раз, данные никогда не меняются, и функция может быть сложной. Но оно должно быть минимальным, совершенным, а расчет должен быть быстрым. Как я могу сделать это лучше? Может быть, можно найти и использовать некоторые подпоследовательности, если они происходят?
Спасибо.