Мне нужно создать 16-битный хеш из 32-битного числа, и я пытаюсь определить, подходит ли простой модуль 2^16.Когда целесообразно использовать простой модуль как функцию хэширования?
Хэш будет использоваться в хеш-таблице ввода 2^16 для быстрого поиска 32-битного номера.
Я понимаю, что если пространство данных имеет довольно равномерное распределение, то простой mod 2^16 в порядке - это не должно приводить к слишком большому количеству столкновений.
В этом случае мой 32 разрядное число является результатом модифицированной Adler32 контрольной суммы, используя 2^16, как М.
Таким образом, в общем смысле, я понимаю правильно, что это прекрасно, чтобы использовать простой mod n (где n - размер hashtable) как функция хэширования, если у меня четное распределение данных?
В частности, будет ли adler32 распределить случайное распространение для этого?
Данные должны скатываться надлежащим образом в зависимости от того, насколько большой размер блока для пользователя. Я делаю это для чистой javascript-реализации алгоритма rsync, поэтому размер блока является переменным. 99% времени, данные должны перевернуться. Я положу TODO в код для повторной оценки позже, если это необходимо, и спасибо за ссылку на CityHash! –