Идеальное хеширование
Определение: |
Идеальная хеш-функция — хеш-функция, которая без коллизий отображает различные элементы из множества объектов на множество ключей за времени. |
Содержание
Практический смысл
Задача идеального хеширования возникает тогда, когда возникает необходимость проверять наличие элемента (скажем, слова из словаря) за гарантировано константное время. При этом подразумевается, что набор данных в таблице статичен либо изменяется очень редко.
Основная идея
Будем использовать двухуровневую схему хеширования с универсальным хешированием на каждом уровне.
Первый уровень
Используется тот же принцип, что и в случае хеширования с цепочками:
ключей хешируются в ячеек с использованием хеш-функции , выбранной из семейства универсальных хеш-функций. Сама хеш-функция будет иметь вид .Второй уровень
На данном уровне будет использовать вторичную хеш-таблицу
Благодаря такому подходу, так как ни в одной из вторичных таблиц нет ни одной коллизии, время поиска в худшем случае будет равно константе. Но для того, чтобы гарантировать отсутствие коллизий на втором уровне, требуется, чтобы размер
хеш-таблицы был равен квадрату числа ключей, хешированных в ячейку .Метод №1
Будем использовать
памяти.Теорема: |
Если ключей сохраняются в хеш-таблице размером c использованием хеш-функции , случайно выбранный из универсального множества хеш-функций, то вероятность возникновения коллизий не превышает . |
Доказательство: |
Всего имеется Это является очень хорошим результатом, если хотя бы вспомнить на примере пар ключей, которые могут вызвать коллизию. Если хеш-функция выбрана случайным образом из универсального семейства хеш-функций H, то для каждой пары вероятность возникновения коллизии равна . Пусть - случайная величина, которая подсчитывает количество коллизий. Если , то математическое ожидание числа коллизий равно парадокса дней рождения о том, что вероятность коллизий растет крайне быстро по сравнению с размером хеш-таблицы. |
Как видно вероятность возникновения коллизий
Метод №2
Будем использовать
памяти.Теорема: |
Если мы сохраняем ключей в хеш-таблице в хеш-таблице размеров c использованием хеш-функции , выбираемой случайным образом из универсального множества хеш-функций, то , где - количество ключей, хешированных в ячейку . |
Доказательство: |
Очевидно, что - просто общее количество коллизий, поэтому по свойству универсального хеширования математическое ожидание значения этой суммы не превышает А так как , то , ч.т.д. |