Jump to content

Двойное хеширование

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

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

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

Выбор ч 2 (к)

[ редактировать ]

Вторичная хэш-функция должен иметь несколько характеристик:

  • Он никогда не должен давать нулевой индекс.
  • Он должен пройти через всю таблицу.
  • Вычисление должно происходить очень быстро.
  • Он должен быть попарно независимым от .
  • Характеристики распределения не имеют значения. Это аналог генератора случайных чисел.
  • Все должно быть относительно простым | Т |.

На практике:

  • Если для обеих функций используется хеширование деления, делители выбираются как простые числа.
  • Если | Т | является степенью двойки, первое и последнее требования обычно удовлетворяются, если сделать всегда возвращайте нечетное число. Побочным эффектом этого является удвоение вероятности коллизии из-за одного потерянного бита. [1]

Позволять быть числом элементов, хранящихся в , затем коэффициент загрузки . То есть начните со случайного, равномерного и независимого выбора двух универсальных хэш- функций. и построить таблицу двойного хеширования . Все элементы вставлены путем двойного хеширования с использованием и . Учитывая ключ , -st местоположение хеша вычисляется по:

Позволять иметь фиксированный коэффициент нагрузки . Брэдфорд и Катехакис [2] показал ожидаемое количество зондов при неудачном поиске в , все еще использующий эти изначально выбранные хэш-функции, независимо от распределения входов. Достаточно попарной независимости хэш-функций.

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

Варианты

[ редактировать ]

Кандидатская диссертация Питера Диллинджера [3] указывает, что двойное хеширование создает нежелательные эквивалентные хэш-функции, когда хэш-функции рассматриваются как набор, как в фильтрах Блума : Если и , затем и наборы хешей идентичны. Это делает столкновение вдвое более вероятным, чем ожидалось. .

Кроме того, существует значительное количество преимущественно перекрывающихся хеш-наборов; если и , затем и сравнение дополнительных хеш-значений (расширение диапазона ) бесполезно.

Тройное хеширование

[ редактировать ]

Добавление квадратичного члена [4] ( треугольное число ) или даже ( тройное хеширование ) [5] к хеш-функции несколько улучшает хеш-функцию [4] но не решает эту проблему; если:

и

затем

Улучшенное двойное хеширование

[ редактировать ]

Добавление кубического члена [4] или ( тетраэдрическое число ), [1] Проблему решает метод, известный как улучшенное двойное хеширование . Это можно эффективно вычислить путем прямого дифференцирования :

struct key;	/// Opaque
/// Use other data types when needed. (Must be unsigned for guaranteed wrapping.)
extern unsigned int h1(struct key const *), h2(struct key const *);

/// Calculate k hash values from two underlying hash functions
/// h1() and h2() using enhanced double hashing.  On return,
///     hashes[i] = h1(x) + i*h2(x) + (i*i*i - i)/6.
/// Takes advantage of automatic wrapping (modular reduction)
/// of unsigned types in C.
void ext_dbl_hash(struct key const *x, unsigned int hashes[], unsigned int n)
{
	unsigned int a = h1(x), b = h2(x), i;

    hashes[i] = a;
	for (i = 1; i < n; i++) {
		a += b;	// Add quadratic difference to get cubic
		b += i;	// Add linear difference to get quadratic
		       	// i++ adds constant difference to get linear
		hashes[i] = a;
	}
}

Помимо устранения проблемы коллизий, улучшенное двойное хеширование также устраняет числовые ограничения двойного хеширования на свойства, позволяющие использовать хеш-функцию, аналогичную по свойствам (но все же независимую от нее) быть использованным. [1]

См. также

[ редактировать ]
  1. ^ Jump up to: Перейти обратно: а б с Диллинджер, Питер К.; Манолиос, Панайотис (15–17 ноября 2004 г.). Фильтры Блума в вероятностной проверке (PDF) . 5-я Международная конференция по формальным методам в автоматизированном проектировании (FMCAD 2004). Остин, Техас. CiteSeerX   10.1.1.119.628 . дои : 10.1007/978-3-540-30494-4_26 .
  2. ^ Брэдфорд, Филипп Г.; Катехакис, Майкл Н. (апрель 2007 г.), «Вероятностное исследование комбинаторных расширителей и хеширования» (PDF) , SIAM Journal on Computing , 37 (1): 83–111, doi : 10.1137/S009753970444630X , MR   2306284 , заархивировано из оригинал (PDF) от 25 января 2016 г.
  3. ^ Диллинджер, Питер К. (декабрь 2010 г.). Адаптивное хранилище приближенных состояний (PDF) (кандидатская диссертация). Северо-Восточный университет. стр. 93–112.
  4. ^ Jump up to: Перейти обратно: а б с Кирш, Адам; Митценмахер, Майкл (сентябрь 2008 г.). «Меньше хэширования, та же производительность: создание лучшего фильтра Блума» (PDF) . Случайные структуры и алгоритмы . 33 (2): 187–218. CiteSeerX   10.1.1.152.579 . дои : 10.1002/rsa.20208 .
  5. ^ Альтернативно определяется треугольным числом, как у Dillinger 2004.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 217b0b4e75a505f9a9f9418bece58934__1716018960
URL1:https://arc.ask3.ru/arc/aa/21/34/217b0b4e75a505f9a9f9418bece58934.html
Заголовок, (Title) документа по адресу, URL1:
Double hashing - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)