31. Хеш-таблицы. Коллизии. Способы разрешения коллизий. Открытая адресация
(линейное пробирование, квадратичное пробирование, двойное хеширование).
Last updated
(линейное пробирование, квадратичное пробирование, двойное хеширование).
Last updated
Хэш-таблица - структура данных, в которой все элементы хранятся в виде пары "ключ-значение". По-другому, это ассоциативный массив. Самый частный пример хэш-таблицы - словарь.
Хэширование - процесс преобразования ключа в некоторый индекс с помощью некоторой функции, которую также называют хэш-функцией.
Сложность алгоритма: О(n)
Быстрый поиск
Равномерное распределение в памяти
Зачастую возникают проблемы в связи с ограниченностью размера типа данных "значений". Количество ключей и количество значений может не совпадать, из-за этого возникает коллизия хэш-функций.
Существует 2 основных типа борьбы с коллизиями:
Метод цепочек
Открытая адресация(3 типа)
Линейное зондирование(пробирование) Линейное опробование сводится к последовательному перебору сегментов таблицы с некоторым фиксированным шагом
Минус: метод приводит к образованию кластеров (когда несколько ячеек подряд заняты). Кластер приводит к тому, что увеличивается время доступа к данным.
Квадратичное зондирование(пробирование)
Квадратичное опробование отличается от линейного тем, что шаг перебора сегментов нелинейно зависит от номера попытки найти свободный сегмент:
Минус: относительно небольшое число проб может быстро привести к выходу за адресное пространство небольшой таблицы вследствие квадратичной зависимости адреса от номера попытки.
Двойное хеширование
Двойное хеширование основано на нелинейной адресации, достигаемой за счет суммирования значений основной и дополнительной хеш-функций
Минус: нерациональное использование огромного количества памяти.