Подтвердить что ты не робот

Выбор множителя для хэш-функции (строки)

Есть ли у вас какие-либо советы/правила по выбору множителя для использования в (мультипликативной) хэш-функции. Функция вычисляет хэш-значение строки.

4b9b3361

Ответ 1

Вы хотите использовать что-то относительно простое размеру вашего набора. Таким образом, когда вы зацикливаетесь, вы не окажетесь на том же количестве, которое вы только что пробовали.

Ответ 2

Недавно у меня было интересное обсуждение с коллегой о хэш-функции. Наши выводы были следующими:

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

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

Извините, что не отвечал прямо на ваш вопрос, но суть в том, что на самом деле нет необходимости писать собственную хеш-функцию для String. На каком языке вы работаете? Я бы предположил, что есть простой способ вычислить хэшированный код "достаточно хороший".

Ответ 3

Исторически 33 кажется популярным выбором, и он работает очень хорошо. Однако никто не знает, почему. Для более подробной информации смотрите здесь