Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по БД.doc
Скачиваний:
117
Добавлен:
01.05.2014
Размер:
432.64 Кб
Скачать

Закрытое хеширование

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

При закрытом хешировании применяется методика повторного хеширования, т.е. если мы пытаемся поместить элемент x в сегмент с номером h(x), который уже занят другим элементом (коллизия), то в соответствии с методикой повторного хеширования выбирается последовательность других номеров сегментов h1 (x), h2 (x)…, куда можно поместить элемент х. Каждый из них проверяется, пока не будет найдено свободное местоположение (сегмент), если свободных сегментов нет, то таблица заполняется, и элемент х вставить нельзя.

B=8

a, b, c, d

h(a)=3, h(b)=0, h(c)=4, h(d)=3

empty, deleted

методика линейного хеширования: h1 (x)= (h(x)+i)mod B

0

в

1

2

3

а

4

с

5

d

6

7

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

Анализ закрытого хеширования

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

Определим, сколько необходимо сделать проверок на заполненность сегментов при вставке нового элемента. Предполагая, что в хеш-таблице, состоящей из В сегментов, содержится N элементов и все комбинации расположения N элементов в В сегментах равновероятны. Вероятность коллизии =. Предполагая, что коллизия совершилась на первом этапе повторного хеширования, работаем с В-1 сегментами, где находитсяN-1 элемент. Тогда вероятность возникновения двух подряд коллизий =. Отсюда следует дляi коллизий .

Среднее количество проб =

для i коллизий, встречающихся подряд

среднее число проб на один сегмент при заполнении М сегментов =

или

для М=В следовательно

Если 90% заполнения М=0,9В, то

приблизительно равно 2,56В

При проверке на принадлежность множеству элемента, которого нет в этом множестве, требуется в среднем такое же количество проб как и при вставке нового элемента при данном заполнении таблицы.

Проверкана принадлежность элемента, который принадлежит множеству, требует в среднем столько же проб, сколько необходимо для вставки всех элементов, сделанных до настоящего времени.

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

Случайные” методики разрешения коллизий

любая методика повторного хеширования, где очередная проба зависит только от предыдущей, обнаруживает группирующие свойства линейного хеширования.

Рассмотрим методику:

h1 (x)= (h(x)+i)mod B, где di є [1;B-1]

di –“случайные” перестановки чисел 1,2,…,В-1.

Набор чисел di должен использоваться при реализации всех операций, выполняемых над множеством, а перемешивание целых чисел должно быть выбрано еще при разработке алгоритма хеширования.

Одним из эффективных методов перемешивания целых чисел является метод последовательных сдвигов регистров.

Пусть В является степенью числа 2, К - константа из интервала є [1;B-1], далее генерируется последовательность di путем удвоения предыдущего значения до тех пор, пока последнее значение не превысит В, тогда чтобы получить следующее di из последнего значения отнимается число В и результат суммируется по mod2 с константой К.

Замечание:не для каждого значения К можно получить все переменные значения из интервала [1;В-1], поэтому необходимо для каждого значения В подобрать свое значение К.

Пример:

В=8, К=3 [1;7] d1=101=5

сдвиг

1010

удаление ведущую

единицу

010

+3

d2=001=1

Сдвиг

d3=010=2

Сдвиг

d4=100=4

Сдвиг

1000

удаление ведущую

единицу

000

+3

d5=001=5

Сдвиг

d6=110=6

Сдвиг

1100

Удаление ведущего

Нуля

100

+3

d7=111=7

Полный перемешанный набор чисел 1,…,7 можно получить также для К=5, но не при каких других значениях.

Соседние файлы в предмете Базы данных