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