Выбор множителя для (строковой) хеш-функции
-
08-06-2019 - |
Вопрос
Есть ли у вас какие-либо советы/правила по выбору множителя для использования в (мультипликативной) хеш-функции.Функция вычисляет хэш-значение строки.
Решение
Вы хотите использовать что-то, что относительно простое по размеру вашего набора.Таким образом, когда вы будете зацикливаться, вы не получите те же числа, которые только что пробовали.
Другие советы
Недавно у меня была интересная дискуссия с коллегой о хэш-функции.Наши выводы были следующими:
Если вам действительно нужно написать хорошую хэш-функцию, которая минимизирует коллизии больше, чем реализации по умолчанию, доступные в стандартных языках, вам нужна ученая степень в области математики.
Если вы пишете приложения, в которых специальная хеш-функция заметно улучшит производительность вашего приложения, вы — Google, и у вас есть много докторов математических наук, которые могут выполнить эту работу.
Извините, что не ответил прямо на ваш вопрос, но суть в том, что на самом деле нет необходимости писать собственную хэш-функцию для String.С каким языком вы работаете?Я полагаю, что есть простой способ вычислить «достаточно хороший» хэш-код.
Исторически 33 кажется популярным выбором и, как правило, работает довольно хорошо.Хотя никто не знает почему.Больше подробностей, Смотри сюда