k-независимое хеширование - k-independent hashing

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

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

Содержание
  • 1 Предпосылки
  • 2 Определения
  • 3 Методы
    • 3.1 Полиномы со случайными коэффициентами
    • 3.2 Хеширование таблиц
  • 4 Независимость, необходимая для различных методов хеширования
  • 5 Ссылки
  • 6 Дополнительная литература
Предпосылки

Целью хеширования обычно является отображение ключей из некоторого большого домена (юниверса) U {\ displaystyle U}U в меньший диапазон, например, m {\ displaystyle m}m ящики (с меткой [m] = {0,…, m - 1} {\ displaystyle [m] = \ {0, \ dots, м-1 \}}[m] = \ {0, \ точки, m-1 \} ). При анализе рандомизированных алгоритмов и структур данных часто желательно, чтобы хеш-коды различных ключей «вели себя случайным образом». Например, если хэш-код каждого ключа был независимым случайным выбором в [m] {\ displaystyle [m]}[m] , количество ключей на ячейку можно было бы проанализировать с помощью Граница Чернова. Детерминированная хеш-функция не может предложить такую ​​гарантию в условиях состязания, поскольку злоумышленник может выбрать ключи, которые будут точно прообразом бункера. Кроме того, детерминированная хеш-функция не позволяет перехешировать: иногда входные данные оказываются плохими для хеш-функции (например, слишком много коллизий), поэтому хотелось бы изменить хеш-функцию.

Решение этих проблем заключается в случайном выборе функции из большого семейства хеш-функций. Случайность при выборе хэш-функции может использоваться для гарантии некоторого желаемого случайного поведения хэш-кодов любых интересующих ключей. Первым определением в этих строках было универсальное хеширование, которое гарантирует низкую вероятность конфликта для любых двух назначенных ключей. Концепция k {\ displaystyle k}k -независимого хеширования, введенная Вегманом и Картером в 1981 году, усиливает гарантии случайного поведения семейств k {\ displaystyle k} <55.>k назначенных ключей и добавляет гарантию равномерного распределения хэш-кодов.

Определения

Самое строгое определение, введенное Вегманом и Картером под названием «строго универсальное k {\ displaystyle _ {k}}_{k}семейство хешей», следующее. Семейство хеш-функций H = {h: U → [m]} {\ displaystyle H = \ {h: U \ to [m] \}}H = \ {h: U \ to [m] \} равно k {\ displaystyle k}k -независимо, если для любого k {\ displaystyle k}k отдельные ключи (x 1,…, xk) ∈ U k {\ displaystyle (x_ {1}, \ dots, x_ {k}) \ in U ^ {k}}(x_ {1}, \ dots, x_ {k}) \ в U ^ {k} и любые хэш-коды k {\ displaystyle k}k (не обязательно отдельные) (y 1,…, yk) ∈ [m] k {\ displaystyle (y_ {1}, \ dots, y_ {k}) \ in [m] ^ {k}}(y_ {1}, \ dots, y_ {k}) \ in [m] ^ {k} , мы имеем:

Pr h ∈ H [час (x 1) = y 1 ∧ ⋯ ∧ час (xk) = yk] = m - k {\ displaystyle \ Pr _ {h \ in H} \ left [h ( x_ {1}) = y_ {1} \ land \ cdots \ land h (x_ {k}) = y_ {k} \ right] = m ^ {- k}}\ Pr _ {{h \ in H}} \ left [h (x_ {1}) = y_ {1} \ land \ cdots \ land h (x_ {k}) = y_ {k} \ right] = m ^ {{- k}}

Это определение эквивалентно следующим двум условия:

  1. для любого фиксированного x ∈ U {\ displaystyle x \ in U}x \ in U , поскольку h {\ displaystyle h}h выбирается случайным образом из H {\ displaystyle H}H , h (x) {\ displaystyle h (x)}h (x) равномерно распределен в [m] {\ displaystyle [m]}[m] .
  2. для любые фиксированные отдельные ключи x 1,…, xk ∈ U {\ displaysty le x_ {1}, \ dots, x_ {k} \ in U}x_ {1}, \ dots, x_ {k} \ in U , поскольку h {\ displaystyle h}h извлекается случайным образом из H {\ displaystyle H}H , h (x 1),…, h (xk) {\ displaystyle h (x_ {1}), \ dots, h (x_ {k})}h (x_ {1}), \ dots, h (x_ {k}) - независимые случайные величины.

Часто бывает неудобно достичь идеальной совместной вероятности m - k {\ displaystyle m ^ {- k}}m ^ {{- k}} из-за проблем с округлением. Далее можно определить (μ, k) {\ displaystyle (\ mu, k)}(\ mu, k) -независимое семейство, чтобы удовлетворить:

∀ {\ displaystyle \ forall}\ forall различные (x 1,…, xk) ∈ U k {\ displaystyle (x_ {1}, \ dots, x_ {k}) \ in U ^ {k}}(x_ {1}, \ dots, x_ {k}) \ в U ^ {k} и ∀ (y 1,…, yk) ∈ [м] к {\ displaystyle \ forall (y_ {1}, \ dots, y_ {k}) \ in [m] ^ {k}}\ forall (y_ {1}, \ dots, y_ {k}) \ in [m] ^ {k} , Pr h ∈ ЧАС [час (Икс 1) знак равно Y 1 ∧ ⋯ ∧ час (xk) = yk] ≤ μ / mk {\ displaystyle ~~ \ Pr _ {h \ in H} \ left [h (x_ {1}) = y_ {1} \ land \ cdots \ land h (x_ {k}) = y_ {k} \ right] \ leq \ mu / m ^ {k}}~~ \ Pr _ {{h \ in H}} \ left [h (x_ {1}) = y_ {1} \ land \ cdots \ land h (x_ { k}) = y_ {k} \ right] \ leq \ mu / m ^ {k}

Обратите внимание на это, даже если μ {\ displaystyle \ mu}\ mu близко к 1, h (xi) {\ displaystyle h (x_ {i})}h (x_i) больше не являются независимыми случайными величинами, которые часто являются проблема анализа рандомизированных алгоритмов. Следовательно, более распространенной альтернативой решению проблем округления является доказательство того, что семейство хешей близко на статистическом расстоянии к k {\ displaystyle k}k -независимому семейству, который позволяет черным ящиком использовать свойства независимости.

Методы

Полиномы со случайными коэффициентами

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

Хеширование табуляции

Хеширование табуляции - это метод сопоставления ключей с хеш-значениями путем разделения каждого ключа на байты с использованием каждого байта в качестве индекса в таблицу случайных чисел (с другой таблицей для каждой позиции байта) и объединение результатов этих поисков в таблице с помощью побитовой операции исключающее или. Таким образом, он требует большей случайности при инициализации, чем полиномиальный метод, но позволяет избежать, возможно, медленных операций умножения. Он 3-независимый, но не 4-независимый. Варианты хеширования табуляции позволяют достичь более высокой степени независимости, выполняя поиск в таблице на основе перекрывающихся комбинаций битов входного ключа или итеративно применяя простое хеширование табуляции.

Независимость, необходимая для различных методов хеширования

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

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

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

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

Ссылки
Дополнительная литература
Последняя правка сделана 2021-05-25 07:10:05
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте