Изменения

Перейти к: навигация, поиск

Участник:Nechaev/Черновик

19 байт убрано, 20:02, 29 апреля 2012
Введение
== Введение ==
Существует два основных варианта хеш-таблиц: ''с цепочками '' и ''открытой адресацией''. Хеш-таблица содержит некоторый массив <tex>H</tex>, элементы которого есть пары (хеш-таблица с открытой адресацией) или списки пар (хеш-таблица с цепочками).
Выполнение операции в хеш-таблице начинается с вычисления хеш-функции от ключа. Получающееся хеш-значение <tex>i = h(key)</tex> играет роль индекса в массиве <tex>H</tex>. Затем, зная индекс, мы можем выполнить требующуюся операцию (добавление, удаление или поиск).
Ситуация, когда для различных ключей получается одинаковое хеш-значение (коллизия), встречается не так уж и редко, и зависит от хеш-функции. Чем лучше, используемая хеш-функция, тем меньше вероятность возникновения коллизии. При вставке в хеш-таблицу размером 365 ячеек всего лишь 23-х элементов вероятность коллизии превышает 50 % (при равномерном распределении значений хеш-функции). Способ разрешения коллизий — важная составляющая любой хеш-таблицы.
Полностью избежать коллизий для произвольных данных невозможно в принципе, и хорошая хеш-функция в состоянии только минимизировать их количество. Но, в некоторых специальных случаях их удаётся избежать. Если все ключи элементов известны заранее, либо меняются очень редко, то можно подобрать хеш-функцию, с помощью которой, все ключи будут распределены по хеш-таблице без коллизий. Это хеш-таблицы с ''прямой адресацией''; в них все операции, такие как: поиск, вставка и удаление {{---}} работают за <tex>O(1)</tex>.
Если мы поделим число хранимых элементов на размер массива <tex>H</tex> (число возможных значений хеш-функции), то узнаем коэффициент заполнения хеш-таблицы (load factor). От этого параметра зависит среднее время выполнения операций.
277
правок

Навигация