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


Исторически 33 кажется популярным выбором, и, как правило, он работает довольно хорошо. Но никто не знает почему. Подробнее: Смотри сюда
Вы хотите использовать что-то относительно простое по размеру вашего набора. Таким образом, при повторении цикла вы не получите те же числа, которые только что попробовали.
Недавно у меня был интересный разговор с коллегой о хэш-функции. Наши выводы были следующими:
Если вам действительно нужно написать хорошую хеш-функцию, которая минимизирует коллизии больше, чем реализации по умолчанию, доступные на стандартных языках, вам понадобится ученая степень по математике.
Если вы пишете приложения, в которых пользовательская хеш-функция заметно улучшит производительность вашего приложения, вы - Google, и у вас есть много кандидатов наук по математике, которые сделают эту работу.
Извините, что не отвечаю прямо на ваш вопрос, но суть в том, что на самом деле нет необходимости писать свою собственную хеш-функцию для String. С каким языком вы работаете? Я предполагаю, что есть простой способ вычислить «достаточно хороший» хэш-код.
На следующей странице представлено несколько эффективных реализаций хэш-функций общего назначения, которые демонстрируют минимальные коллизии: partow.net/programming/hashfunctions/index.html