Хеш-таблица
Хеш-табли́ца, неупорядоченная структура данных, состоящая из пар «ключ – значение», адресация (добавление, поиск, удаление) элементов в которой осуществляется при помощи хеширования. Ключ (исходное информационное сообщение) хеш-функция преобразует в уникальный индекс, которому ставится в соответствие некоторое значение.
Понятие можно проиллюстрировать на следующем примере. На предприятии в отделе кадров ведутся личные дела всех сотрудников. При этом существует список сотрудников с краткими сведениями о них: фамилия, год рождения, номер телефона и др. Можно хранить личные дела в папках, сложив в каждую дела сотрудников, фамилии которых начинаются с одной и той же буквы. Можно также хранить в одной папке личные дела сотрудников, имеющих одинаковые последние три цифры номера телефона.
И при одном, и при другом подходе была построена хеш-таблица, ключом которой является запись с краткими сведениями о сотруднике, значением – его личное дело, а хеш-кодом – первая буква фамилии или последние три цифры номера телефона соответственно. Если не принимать в расчёт неизбежные при большом числе сотрудников коллизии (необходимость просмотреть, возможно, все дела в одной папке), вычислительная сложность по времени трёх алгоритмов: поиска, добавления и удаления записи о сотруднике будет составлять т. е. не будет зависеть от длины исходных данных (количества сотрудников). В общем случае по этому параметру хеш-таблицы обладают преимуществом по сравнению с другими структурами данных, например массивом или двоичным деревом поиска. См. также «О большое».
Хеш-функции, используемые для хеш-таблиц, должны быстро вычисляться и порождать равномерное распределение формируемых индексов. В отличие от криптографических хеш-функций, к ним не предъявляются требования необратимости и лавинного эффекта, а требованием устойчивости к коллизиям зачастую жертвуют в угоду повышению быстродействия. Коллизии в хеш-таблицах не являются экстраординарными событиями, и для их обработки используют специальные методы, такие как двойное хеширование, открытая адресация, связанные списки и др.
Хеш-таблицы широко применяются в программировании, в том числе для организации словарей. В библиотеки многих языков программирования, например Python, Java, C, C++ и др., включены различные реализации хеш-таблиц.