Идеальное хеширование — различия между версиями
Shersh (обсуждение | вклад) |
Kabanov (обсуждение | вклад) (→Метод №2) |
||
Строка 43: | Строка 43: | ||
<tex>E\left[\displaystyle \sum_{j=0}^{m-1} n_j^2 \right] \leqslant </tex> <tex dpi="150"> n + 2 \cdot {n-1 \over 2} = 2n - 1 < 2n</tex>, ч.т.д. | <tex>E\left[\displaystyle \sum_{j=0}^{m-1} n_j^2 \right] \leqslant </tex> <tex dpi="150"> n + 2 \cdot {n-1 \over 2} = 2n - 1 < 2n</tex>, ч.т.д. | ||
}} | }} | ||
+ | Теперь выведем следствие из этой теоремы. | ||
+ | |||
+ | {{Теорема | ||
+ | |statement= | ||
+ | Если мы сохраняем <tex>n</tex> ключей в хеш-таблице размером <tex>m=n</tex> с использованием хеш-функции <tex>h</tex>, выбираемой случайным образом из [[Универсальное_семейство_хеш-функций | универсального множества хеш-функций]], и устанавливаем размер каждой вторичной хеш-таблицы равным <tex>m_j=n_j^2</tex> <tex>(j=0,1,...,m-1)</tex>, то математическое ожидание количества необходимой для вторичных хеш-таблиц в схеме идеального хеширования памяти не превышает <tex>2n</tex>. | ||
+ | |proof= | ||
+ | Поскольку <tex>m_j=n_j^2</tex> для <tex>j=0,1,...,m-1</tex>, согласно предыдущей теореме: | ||
+ | |||
+ | <tex>E\left[\displaystyle \sum_{j=0}^{m-1} m_j \right] = E\left[\displaystyle \sum_{j=0}^{m-1} n_j^2 \right] < 2n</tex>, ч.т.д. | ||
+ | |||
+ | }} | ||
+ | В данном методе видно, что очень неплохо экономится память по сравнению же с другими способами хеширования. | ||
==См. также== | ==См. также== |
Версия 23:00, 12 июня 2013
Определение: |
Идеальная хеш-функция — хеш-функция, которая без коллизий отображает различные элементы из множества объектов на множество ключей за времени в худшем случае. |
Содержание
Практический смысл
Задача идеального хеширования возникает тогда, когда возникает необходимость проверять наличие элемента (скажем, слова из словаря) за гарантировано константное время. При этом подразумевается, что набор данных в таблице статичен либо изменяется очень редко.
Основная идея
Будем использовать двухуровневую схему хеширования с универсальным хешированием на каждом уровне.
Первый уровень
Используется тот же принцип, что и в случае хеширования с цепочками: семейства универсальных хеш-функций. Сама хеш-функция будет иметь вид .
ключей хешируются в ячеек с использованием хеш-функции , выбранной изВторой уровень
На данном уровне будет использовать вторичную хеш-таблицу
Благодаря такому подходу, так как ни в одной из вторичных таблиц нет ни одной коллизии, время поиска в худшем случае будет равно константе. Но для того, чтобы гарантировать отсутствие коллизий на втором уровне, требуется, чтобы размер
хеш-таблицы был равен квадрату числа ключей, хешированных в ячейку .Метод №1
Будем использовать
памяти.Теорема: |
Если универсального множества хеш-функций, то вероятность возникновения коллизий не превышает . ключей сохраняются в хеш-таблице размером c использованием хеш-функции , случайно выбранный из |
Доказательство: |
Всего имеется универсального семейства хеш-функций , то для каждой пары вероятность возникновения коллизии равна . Пусть — случайная величина, которая подсчитывает количество коллизий. Если , то математическое ожидание числа коллизий равно пар ключей, которые могут вызвать коллизию. Если хеш-функция выбрана случайным образом из |
Это является очень хорошим результатом, если хотя бы вспомнить на примере парадокса дней рождения о том, что вероятность коллизий растет крайне быстро по сравнению с размером хеш-таблицы.
Метод №2
Будем использовать
памяти.Теорема: |
Если мы сохраняем ключей в хеш-таблице в хеш-таблице размеров c использованием хеш-функции , выбираемой случайным образом из универсального множества хеш-функций, то , где — количество ключей, хешированных в ячейку . |
Доказательство: |
Первый переход в равенстве мы совершили благодаря формуле математического ожидания, в частности - линейности. . Далее мы воспользовались свойствамиОчевидно, что - просто общее количество коллизий, поэтому по свойству универсального хеширования математическое ожидание значения этой суммы не превышает А так как , то , ч.т.д. |
Теперь выведем следствие из этой теоремы.
Теорема: |
Если мы сохраняем универсального множества хеш-функций, и устанавливаем размер каждой вторичной хеш-таблицы равным , то математическое ожидание количества необходимой для вторичных хеш-таблиц в схеме идеального хеширования памяти не превышает . ключей в хеш-таблице размером с использованием хеш-функции , выбираемой случайным образом из |
Доказательство: |
Поскольку для , согласно предыдущей теореме: , ч.т.д. |
В данном методе видно, что очень неплохо экономится память по сравнению же с другими способами хеширования.
См. также
Ссылки
- Т. Кормен. «Алгоритмы. Построение и анализ» второе издание, Глава 11.5, стр. 308
- Д.Э. Кнут. «Искусство программирования: Сортировка и поиск" Том 3, Глава 6.4, стр. 563
- Perfect hash function — Wikipedia
- Universal and Perfect Hashing
- Универсальное хэширование. Идеальное хэширование