Открытое и закрытое хеширование — различия между версиями
Baev.dm (обсуждение | вклад) |
Baev.dm (обсуждение | вклад) |
||
Строка 4: | Строка 4: | ||
[[Файл:Hash_open.jpg|600px|thumb|center|описание]] | [[Файл:Hash_open.jpg|600px|thumb|center|описание]] | ||
==Закрытое хеширование== | ==Закрытое хеширование== | ||
+ | [[Файл:Hash_close.jpg|375px|thumb|center|описание]] | ||
+ | ==См. также== | ||
[[Поиск свободного места при закрытом хешировании]] | [[Поиск свободного места при закрытом хешировании]] |
Версия 02:08, 17 мая 2011
Есть разные методы борьбы с коллизиями. Рассмотрим два из них.
Открытое хеширование
Открытое хеширование (метод цепочек) — простейший метод борьбы с коллизиями. При использовании этого метода мы объединяем все элементы, хешированные в одну и ту же ячейку, в связный список. Ячейка
содержит указатель на заголовок списка всех элементов, хэш-значение ключа которых равно ; если таких элементов нет, ячейка содержит значение . Элементы вставляются в заголовок списка. Время, необходимое для вставки в наихудшем случае равно , учитывая то, что мы предполагаем отсутствие вставляемого элемента в таблице. Время поиска зависит от длины списка, и в худшем случае равно . Эта ситуация, когда все элементы хешируются в единственную ячейку. Если функция распределяем ключей по ячейкам таблицы равномерно, то в каждом списке будет содержаться порядка ключей. Это число называется коэффициентом заполнения хеш-таблицы. Математический анализ хеширования с цепочками показывает, что в среднем случае все операции в такой хеш-таблице в среднем выполняются за время . При использовании двусвязных списков удаление также может быть выполено за . (доказательство см. Т.Корман, второе издание, стр. 288)