vak: (Default)
[personal profile] vak
Хэш-функция - это такой алгоритм, который для некоторой текстовой строки вычисляет число. Хитрость в том, чтобы числа получались не очень большие, и для разных строк разные.

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

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

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

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

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

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