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

StackOverflow https://stackoverflow.com/questions/16873

  •  08-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

Исторически 33 кажется популярным выбором и, как правило, работает довольно хорошо.Хотя никто не знает почему.Больше подробностей, Смотри сюда

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top