Исправить хеш-функцию для больших целых чисел, или я должен преобразовать их в строку? - PullRequest
3 голосов
/ 08 августа 2011

У меня есть приложение, в котором каждый элемент идентифицируется уникальным 32-битным числом, или «ключом».Моя главная задача - скорость поиска в хэш-таблице любого конкретного ключа, чтобы получить прикрепленный элемент.У меня есть выбор для хэш-таблицы: ELF, PJW и BKDR.Безопасность не является проблемой, поэтому в таком случае, какой из этих алгоритмов хеширования создаст таблицу с наилучшей скоростью поиска?

Еще одно соображение.Получу ли я лучшую производительность, если бы я преобразовал число в его строковое представление и использовал его для ключа?

Примечание: я нашел этот соответствующий поток SO:

Какая целочисленная хеш-функцияхорошо, что принимает целочисленный хэш-ключ?

Но принятый ответ имел некоторые противоположные точки зрения в комментариях, которые казались разумными, и распространение предостережений и мнений по всем остальным ответам оставляло меня все еще неуверенным, посколькуна лучший алгоритм для моего сценария использования.

Ответы [ 3 ]

3 голосов
/ 19 августа 2012

Проблема с нахождением хорошей, быстрой хэш-функции была решена: http://code.google.com/p/smhasher/wiki/MurmurHash3

Время, когда хэш-функции, основанные на математических приемах, таких как мультипликативный хэш Кнута, прошли.Современные хеши работают с использованием бинарных операций.

Может быть, вы можете просто взять целое число, которое у вас уже есть, и не хэшировать его вообще.Если коллизий слишком много, что происходит только из-за какого-то специального распределения данных, используйте MurmurHash.

0 голосов
/ 19 августа 2012

Просто используйте словарь. Поскольку каждый элемент идентифицируется «уникальным» 32-битным числом, хэш-набор - это не структура данных, которую вы ищете. Вы ищете словарь пар ключ-значение.

0 голосов
/ 08 августа 2011

Преобразование в строку и хеширование строки, вероятно, будет медленным. Для простой хеш-функции я был бы склонен разбить большое (насколько большое?) Число на 32-битные порции и XOR порции вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...