Есть ли у вас какие-либо советы/правила по выбору множителя для использования в (мультипликативной) хэш-функции. Функция вычисляет хэш-значение строки.
Выбор множителя для хэш-функции (строки)
Ответ 1
Вы хотите использовать что-то относительно простое размеру вашего набора. Таким образом, когда вы зацикливаетесь, вы не окажетесь на том же количестве, которое вы только что пробовали.
Ответ 2
Недавно у меня было интересное обсуждение с коллегой о хэш-функции. Наши выводы были следующими:
Если вам действительно нужно написать хорошую хеш-функцию, которая сводит к минимуму столкновения больше, чем реализаций по умолчанию, доступных на стандартных языках, вам нужна расширенная степень математики.
Если вы пишете приложения, где пользовательская хеш-функция заметно улучшит производительность вашего приложения, вы Google, и у вас есть много кандидатов наук по математике, чтобы выполнить эту работу.
Извините, что не отвечал прямо на ваш вопрос, но суть в том, что на самом деле нет необходимости писать собственную хеш-функцию для String. На каком языке вы работаете? Я бы предположил, что есть простой способ вычислить хэшированный код "достаточно хороший".
Ответ 3
Исторически 33 кажется популярным выбором, и он работает очень хорошо. Однако никто не знает, почему. Для более подробной информации смотрите здесь