Идеальное хеширование — различия между версиями
Kabanov (обсуждение | вклад) |
Kabanov (обсуждение | вклад) м (→Первый уровень) |
||
Строка 10: | Строка 10: | ||
Будем использовать двухуровневую схему хеширования с универсальным хешированием на каждом уровне. | Будем использовать двухуровневую схему хеширования с универсальным хешированием на каждом уровне. | ||
=== Первый уровень === | === Первый уровень === | ||
− | Используется тот же принцип, что и в случае хеширования с цепочками: <tex>n</tex> ключей хешируются в <tex>m</tex> ячеек с использованием хеш-функции <tex>h</tex>, выбранной из семейства универсальных хеш-функций. | + | Используется тот же принцип, что и в случае хеширования с цепочками: <tex>n</tex> ключей хешируются в <tex>m</tex> ячеек с использованием хеш-функции <tex>h</tex>, выбранной из [[Универсальное_семейство_хеш-функций | семейства универсальных хеш-функций]]. |
Сама хеш-функция будет иметь вид <tex>h(k) = ((a*k+b) \mod p)</tex>. | Сама хеш-функция будет иметь вид <tex>h(k) = ((a*k+b) \mod p)</tex>. | ||
+ | |||
=== Второй уровень === | === Второй уровень === | ||
На данном уровне будет использовать вторичную хеш-таблицу <tex>S_j</tex> со своей функций <tex>h_j</tex>. <tex>S_j</tex> будет хранить все ключи, хешированные в ячейку <tex>j</tex>. Соответственно, хеш-функция будет вида <tex>h_j((a_j*k + b_j) \mod p) \mod m_j</tex>.<br> | На данном уровне будет использовать вторичную хеш-таблицу <tex>S_j</tex> со своей функций <tex>h_j</tex>. <tex>S_j</tex> будет хранить все ключи, хешированные в ячейку <tex>j</tex>. Соответственно, хеш-функция будет вида <tex>h_j((a_j*k + b_j) \mod p) \mod m_j</tex>.<br> |
Версия 22:37, 9 июня 2013
Определение: |
Идеальная хеш-функция — хеш-функция, которая без коллизий отображает различные элементы из множества объектов на множество ключей за времени. |
Содержание
Практический смысл
Задача идеального хеширования возникает тогда, когда возникает необходимость проверять наличие элемента (скажем, слова из словаря) за гарантировано константное время. При этом подразумевается, что набор данных в таблице статичен либо изменяется очень редко.
Основная идея
Будем использовать двухуровневую схему хеширования с универсальным хешированием на каждом уровне.
Первый уровень
Используется тот же принцип, что и в случае хеширования с цепочками: семейства универсальных хеш-функций. Сама хеш-функция будет иметь вид .
ключей хешируются в ячеек с использованием хеш-функции , выбранной изВторой уровень
На данном уровне будет использовать вторичную хеш-таблицу
Благодаря такому подходу, так как ни в одной из вторичных таблиц нет ни одной коллизии, время поиска в худшем случае будет равно константе. Но для того, чтобы гарантировать отсутствие коллизий на втором уровне, требуется, чтобы размер
хеш-таблицы был равен квадрату числа ключей, хешированных в ячейку .Метод №1
Будем использовать
памяти.Теорема: |
Если ключей сохраняются в хеш-таблице размером c использованием хеш-функции , случайно выбранный из универсального множества хеш-функций, то вероятность возникновения коллизий не превышает . |
Доказательство: |
Всего имеется Это является очень хорошим результатом, если хотя бы вспомнить на примере пар ключей, которые могут вызвать коллизию. Если хеш-функция выбрана случайным образом из универсального семейства хеш-функций H, то для каждой пары вероятность возникновения коллизии равна . Пусть - случайная величина, которая подсчитывает количество коллизий. Если , то математическое ожидание числа коллизий равно парадокса дней рождения о том, что вероятность коллизий растет крайне быстро по сравнению с размером хеш-таблицы. |
Как видно вероятность возникновения коллизий
Метод №2
Будем использовать
памяти.Теорема: |
Если мы сохраняем ключей в хеш-таблице в хеш-таблице размеров c использованием хеш-функции , выбираемой случайным образом из универсального множества хеш-функций, то , где - количество ключей, хешированных в ячейку . |
Доказательство: |
Очевидно, что - просто общее количество коллизий, поэтому по свойству универсального хеширования математическое ожидание значения этой суммы не превышает А так как , то , ч.т.д. |