logo
Высокоцровневые методы информатики и првые методы информатики и программированияограммирования

Анализ хеширования с цепочками

Пусть Т – хеш-таблица с т позициями, в которую занесено п элементов. Коэффициентом заполнения (load factor) таблицы называется число α = n/m (это число может быть и меньше, и больше единицы). Далее стоимость операций будет оцениваться в терминах α.

В худшем случае хеширование с цепочками неоптимально: если хеш-значения всех n ключей совпадают, то таблица сводится к одному списку длины n, и на поиск будет тратиться то же время Θ(n), что и на поиск списке, плюс ещё время на вычисление хеш-функции. Конечно, в такой ситуации хеширование бессмысленно.

Средняя стоимость поиска зависит от того, насколько равномерно хеш-функция распределяет хеш-значения по позициям таблицы. Будем условно предполагать, что каждый данный элемент может попасть в любую из m позиций таблицы с равной вероятностью и независимо от того, куда попал другой элемент. Это предположение называется гипотезой «равномерного хеширования» (simple uniform hashing).

Положим также, что для данного ключа k вычисление хеш-значения h(k) шаг по списку и сравнение ключей требует фиксированного времени, так что время поиска элемента с ключом k линейно зависит от количества элементов списке T[h(k)], которые мы просматриваем в процессе поиска. Будем различать два случая: в первом случае поиск оканчивается неудачей (элемента с ключом в списке нет), во втором поиск успешен – элемент с требуемым ключом обнаруживается.

Теорема 4.1. Пусть Т – хеш-таблица с цепочками, имеющая коэффициент заполнения α. Предположим, что хеширование равномерно. Тогда при поиске элемента, отсутствующего в таблице, будет просмотрено в среднем α элементов таблицы, а среднее время такого поиска (включая время на вычисление хеш-функции) будет равно Θ(1 + α).

Доказательство. Поскольку в предположении равномерного хеширования все позиции таблицы для данного ключа равновероятны, среднее время поиска отсутствующего элемента совпадает со средним временем полного просмотра одного из т списков, то есть пропорционально средней длине наших m списков. Эта средняя длина есть п/т = α, откуда получаем первое утверждение теоремы; второе утверждение получится, если добавить время Θ(1) на вычисление хеш-значения.

Теорема 4.2. При равномерном хешировании среднее время успешного поиска в хеш-таблице с цепочками есть Θ(1 + α), где α – коэффициент заполнения.

Доказательство. Хотя формулировка этой теоремы похожа на предыдущую, смысл утверждения несколько иной. В предыдущей теореме рассматривалась произвольная таблица с коэффициентом заполнения α и оценивалось среднее число действий, необходимых для поиска случайного элемента, равновероятно попадающего во все ячейки таблицы. В этой теореме так делать нельзя: если мы возьмём произвольную таблицу и, считая все её элементы равновероятными, будем искать среднее время поиска случайно выбранного из них, то оценки вида Θ(1 + α) не получится (контрпример: таблица, в которой все элементы попали в один список).

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

Посмотрим на ситуацию в тот момент, когда таблица уже построена, не случайный элемент для поиска ещё не выбран. Чему равно среднее время по­иска, усреднённое по всем п элементам таблицы? Надо сложить позиции всех элементов в своих списках и поделить сумму на п (общее число элементов).

Если представить себе, что при заполнении таблицы элементы дописывались в конец соответствующих списков, то упомянутая сумма по порядку величины равна общему число операций, выполненных при заполнение таблицы (поскольку при добавлении в конец и при поиске выполняется одно и то же количество действий).

Теперь вспомним об усреднении по различным возможностям в процессе построения таблицы. При добавлении в неё i-го элемента математическое ожи­дание числа действий равно Θ(1 + (i – 1) / m) (см. доказательство предыдущей теоремы), и потому математическое ожидание общего числа действий при за­полнении таблицы, делённое на n, есть

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