Хеш-таблицы

Мгновенный доступ по ключу, разрешение коллизий и ассоциативные массивы. Структуры для O(1) поиска.

100%
Хеш-таблицы

Описание темы «Хеш-таблицы» под заголовком

Хеш-функции для таблиц

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

Карта темы «Хеш-функции для таблиц»

Разрешение коллизий

Методы обработки одинаковых хешей: метод цепочек (chaining, список в ячейке), открытая адресация (linear probing, quadratic, double hashing). Цепочки: O(1) средний случай, O(n) худший.

Карта темы «Разрешение коллизий»

Коэффициент заполнения (Load Factor)

Отношение числа элементов к размеру таблицы: α = n/m. При α > 0.7 производительность падает, требуется rehashing (увеличение таблицы в 2 раза, перехеширование всех элементов). Java HashMap: порог 0.75.

Карта темы «Коэффициент заполнения (Load Factor)»

Идеальное хеширование (Perfect Hashing)

Хеш-функция без коллизий для заданного набора ключей. Минимальное идеальное хеширование: m = n. Используется для статических словарей (ключевые слова языка). Построение: универсальное хеширование + двухуровневая схема.

Карта темы «Идеальное хеширование (Perfect Hashing)»

Практические реализации хеш-таблиц

Хеш-таблицы в стандартных библиотеках: Python dict (open addressing с рандомизацией), Java HashMap (цепочки), C++ unordered_map (цепочки). Rehashing при load factor > 0.75. Benchmarks показывают O(1) среднее.

Карта темы «Практические реализации хеш-таблиц»

Метод цепочек

Разрешение коллизий связными списками в ячейках. Простая реализация, работает при любом заполнении. Среднее O(1+α) где α — коэффициент заполнения.

Карта темы «Метод цепочек»

Открытая адресация

При коллизии ищет свободную ячейку (линейное/квадратичное пробирование). Лучше кэшируется. Удаление требует меток. Применяется в Python dict.

Карта темы «Открытая адресация»

1. Структуры данных
1. Структуры данных