vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2006-06-15 10:31 pm

Эффективные хэш-функции

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

Собрал я в кучу несколько вариантов и потестировал. Один из вариантов - самопальный, придуманный в далеком студенчестве. Оказывается, неплохо работает.
spamsink: (Default)

[personal profile] spamsink 2006-06-15 06:55 pm (UTC)(link)
Все фигня. Сюда ходи: http://burtleburtle.net/bob/hash/index.html
spamsink: (Default)

[personal profile] spamsink 2006-06-15 08:15 pm (UTC)(link)
Он у нас работает практически со дня основания компании - точнее, с того момента, как хэш-функции в G++ extensions перестали нас устраивать. У меня CSE использует эту функцию - и ни одной коллизии на многие миллионы узлов. Проверь, кстати, все приведенные тобой функции на avalanche - интересно, что получится.
spamsink: (Default)

[personal profile] spamsink 2006-06-16 08:16 am (UTC)(link)
Там в одной из статей рассказывается. Avalanche - это когда изменение одного бита хэшируемого объекта приводит к изменению любого бита хэша со средней вероятностью 50%.
spamsink: (Default)

[personal profile] spamsink 2006-06-17 12:26 am (UTC)(link)
Сырое значение хэша обычно не используется. Для индексации в хэш-таблице используется какое-то подмножество битов хэша (или остаток от деления хэша на размер таблицы). Попробуй собрать статистику по распределению, скажем, младших 10 и младших 16 бит - интересно, у кого окажется наиболее равномерное.
spamsink: (Default)

[personal profile] spamsink 2006-06-17 12:28 am (UTC)(link)
Или, скажем, остатки от деления на 10007 или 65521.