Деление на ноль

Хеш-таблица методом цепочек: интерактивная анимация (Separate Chaining)

Быстрый поиск и вставка, где коллизии решаются связными списками

Визуализация

Сценарий: Вставка ключей
Сценарий:
Хеш-функция: ключ mod 5
Легенда цветов
активная корзина вставленный узел проверяемый узел найденный узел
Нажмите "Пуск" или листайте по шагам.
Заполнение: 0 Коллизий: 0 Шаг: 0 / 0 Сложность по времени: -

Как работает хеш-таблица методом цепочек

Идея структуры: Хеш-таблица использует массив списков (называемых "корзинами"). Чтобы добавить или найти элемент, специальная хеш-функция преобразует ключ в число - индекс корзины. Так мы можем за одно вычисление мгновенно понять, где лежит элемент.

Сложность

Сложность - это оценка того, как быстро растет потребление ресурса при росте числа элементов n. Ресурса у структуры два, поэтому и оценки две: по времени и по памяти. Обе записывают через O-нотацию - у нас есть отдельная анимация о том, как читать такие записи.

Производительность хеш-таблицы зависит от качества хеш-функции. Если она хорошо перемешивает ключи, цепочки остаются короткими.

По времени

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

По памяти

Характеристика Оценка Комментарий
Затраты по памяти O(n + K) Где n - число элементов, K - число корзин. Память тратится на сами узлы (n) и массив корзин (K).

Свойства

Свойство Значение Комментарий
Разрешение коллизий Метод цепочек Элементы с одинаковым хешем помещаются в связный список соответствующей корзины массива.
Коэффициент загрузки α = n / K Среднее число элементов в корзине: n ключей на K корзин. Чем выше α, тем длиннее цепочки и тем медленнее поиск.
Рехеширование Динамическое При превышении порога загрузки размер массива корзин увеличивается с перерасчетом хешей.

Примеры реализации: Хеш-таблица методом цепочек (Separate Chaining)

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