Введение

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

Влияние на производительность

Первичное кластерирование приводит к снижению производительности как для вставки, так и для запросов в линейной пробной хэш-таблице. Вставки должны доходить до конца пробега, и поэтому занимают ожидаемое время. Однако, как отмечает Кнут, обычно цитируя Кнут. (часто называемый хешированием Робин Гуда) - это метод уменьшения эффектов первичного кластеризации запросов. Заказанное линейное исследование сортирует элементы внутри каждого хода по их хэшу. Таким образом, запрос может быть завершен, как только он находит любой элемент, хэш которого больше, чем хэш запрашиваемого элемента. Это приводит к тому, что как положительные, так и отрицательные запросы занимают ожидаемое время. Хэширование кладбища является вариантом упорядоченного линейного зондирования, который устраняет асимптотические эффекты первичного кластерирования для всех операций. Хеш-схема кладбища стратегически оставляет пробелы в пробегах, которые могут использоваться для будущих вставлений. Эти пробелы, которые можно рассматривать как надгробия (например, созданные ленивыми стираниями), вставляются в таблицу во время полурегулярных перестроек. Затем пробелы ускоряют вставки, которые происходят до следующего полурегулярного восстановления. Каждая операция в кладбище хэш-таблицы занимает ожидаемое время Многие источники рекомендуют использовать квадратное зондирование в качестве альтернативы линейному зондированию, которое эмпирически избегает эффектов первичного кластерирования.