Первичная кластеризация - Primary clustering

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

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

Связанное явление, вторичная кластеризация, чаще встречается в режимах открытой адресации, включая линейное зондирование и квадратичное зондирование в котором последовательность зонда не зависит от ключа, а также в цепочке хешей. В этом явлении некачественный хеш-функция может привести к тому, что многие ключи будут хешироваться в одно и то же место, после чего все они следуют одной и той же последовательности зондов или помещаются в одну цепочку хеширования друг с другом, что приводит к замедлению доступа к ним.[1]

Оба типа кластеризации можно уменьшить, используя более качественную хэш-функцию или используя такой метод хеширования, как двойное хеширование это менее подвержено кластеризации.[1]

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

  1. ^ а б c Смит, Питер (2004), Прикладные структуры данных с C ++, Jones & Bartlett Learning, стр. 186–188, ISBN  9780763725624.
  2. ^ Питтель, Б. (1987), «Линейное зондирование: возможное наибольшее время поиска логарифмически увеличивается с количеством записей», Журнал алгоритмов, 8 (2): 236–249, Дои:10.1016 / 0196-6774 (87) 90040-Х, Г-Н  0890874.