Идеальное хеширование — различия между версиями
Kabanov (обсуждение | вклад) м (→Первый уровень) |
Kabanov (обсуждение | вклад) м (→Метод №1) |
||
Строка 21: | Строка 21: | ||
{{Теорема | {{Теорема | ||
|statement= | |statement= | ||
− | Если <tex>n</tex> ключей сохраняются в хеш-таблице размером <tex>m=n^2</tex> c использованием хеш-функции <tex>h</tex>, случайно выбранный из универсального множества хеш-функций, то вероятность возникновения коллизий не превышает <tex dpi="180">{1 \over 2}</tex>. | + | Если <tex>n</tex> ключей сохраняются в хеш-таблице размером <tex>m=n^2</tex> c использованием хеш-функции <tex>h</tex>, случайно выбранный из [[Универсальное_семейство_хеш-функций | универсального множества хеш-функций]], то вероятность возникновения коллизий не превышает <tex dpi="180">{1 \over 2}</tex>. |
|proof= | |proof= | ||
− | Всего имеется <tex>\dbinom{n}{2}</tex> пар ключей, которые могут вызвать коллизию. Если хеш-функция выбрана случайным образом из универсального семейства хеш-функций H, то для каждой пары вероятность возникновения коллизии равна <tex dpi="180">{1 \over m}</tex>. Пусть <tex>X</tex> - случайная величина, которая подсчитывает количество коллизий. Если <tex>m = n^2</tex>, то математическое ожидание числа коллизий равно | + | Всего имеется <tex>\dbinom{n}{2}</tex> пар ключей, которые могут вызвать коллизию. Если хеш-функция выбрана случайным образом из [[Универсальное_семейство_хеш-функций | универсального семейства хеш-функций]] H, то для каждой пары вероятность возникновения коллизии равна <tex dpi="180">{1 \over m}</tex>. Пусть <tex>X</tex> - [[Дискретная_случайная_величина |случайная величина]], которая подсчитывает количество коллизий. Если <tex>m = n^2</tex>, то [[Математическое_ожидание_случайной_величины | математическое ожидание]] числа коллизий равно |
<tex>E[X] = </tex> <tex dpi="180"> \binom{n}{2} * {1 \over n^2} = {n^2-n \over n} * {1 \over n^2} < {1 \over 2}</tex> | <tex>E[X] = </tex> <tex dpi="180"> \binom{n}{2} * {1 \over n^2} = {n^2-n \over n} * {1 \over n^2} < {1 \over 2}</tex> | ||
+ | }} | ||
Это является очень хорошим результатом, если хотя бы вспомнить на примере [http://neerc.ifmo.ru/wiki/index.php?title=%D0%A5%D0%B5%D1%88-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0#.D0.92.D0.B2.D0.B5.D0.B4.D0.B5.D0.BD.D0.B8.D0.B5 парадокса дней рождения] о том, что вероятность коллизий растет крайне быстро по сравнению с размером хеш-таблицы. | Это является очень хорошим результатом, если хотя бы вспомнить на примере [http://neerc.ifmo.ru/wiki/index.php?title=%D0%A5%D0%B5%D1%88-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0#.D0.92.D0.B2.D0.B5.D0.B4.D0.B5.D0.BD.D0.B8.D0.B5 парадокса дней рождения] о том, что вероятность коллизий растет крайне быстро по сравнению с размером хеш-таблицы. | ||
− | + | ||
− | |||
== Метод №2 == | == Метод №2 == | ||
Будем использовать <tex>O(n)</tex> памяти. | Будем использовать <tex>O(n)</tex> памяти. |
Версия 22:41, 9 июня 2013
Определение: |
Идеальная хеш-функция — хеш-функция, которая без коллизий отображает различные элементы из множества объектов на множество ключей за времени. |
Содержание
Практический смысл
Задача идеального хеширования возникает тогда, когда возникает необходимость проверять наличие элемента (скажем, слова из словаря) за гарантировано константное время. При этом подразумевается, что набор данных в таблице статичен либо изменяется очень редко.
Основная идея
Будем использовать двухуровневую схему хеширования с универсальным хешированием на каждом уровне.
Первый уровень
Используется тот же принцип, что и в случае хеширования с цепочками: семейства универсальных хеш-функций. Сама хеш-функция будет иметь вид .
ключей хешируются в ячеек с использованием хеш-функции , выбранной изВторой уровень
На данном уровне будет использовать вторичную хеш-таблицу
Благодаря такому подходу, так как ни в одной из вторичных таблиц нет ни одной коллизии, время поиска в худшем случае будет равно константе. Но для того, чтобы гарантировать отсутствие коллизий на втором уровне, требуется, чтобы размер
хеш-таблицы был равен квадрату числа ключей, хешированных в ячейку .Метод №1
Будем использовать
памяти.Теорема: |
Если универсального множества хеш-функций, то вероятность возникновения коллизий не превышает . ключей сохраняются в хеш-таблице размером c использованием хеш-функции , случайно выбранный из |
Доказательство: |
Всего имеется универсального семейства хеш-функций H, то для каждой пары вероятность возникновения коллизии равна . Пусть - случайная величина, которая подсчитывает количество коллизий. Если , то математическое ожидание числа коллизий равно пар ключей, которые могут вызвать коллизию. Если хеш-функция выбрана случайным образом из |
Это является очень хорошим результатом, если хотя бы вспомнить на примере парадокса дней рождения о том, что вероятность коллизий растет крайне быстро по сравнению с размером хеш-таблицы.
Метод №2
Будем использовать
памяти.Теорема: |
Если мы сохраняем ключей в хеш-таблице в хеш-таблице размеров c использованием хеш-функции , выбираемой случайным образом из универсального множества хеш-функций, то , где - количество ключей, хешированных в ячейку . |
Доказательство: |
Очевидно, что - просто общее количество коллизий, поэтому по свойству универсального хеширования математическое ожидание значения этой суммы не превышает А так как , то , ч.т.д. |