stringtranslate.com

Квадратичный зонд

Квадратичное зондирование — это открытая схема адресации в компьютерном программировании для разрешения коллизий хэшей в хэш-таблицах . Квадратичное зондирование работает, беря исходный индекс хэша и добавляя последовательные значения произвольного квадратичного полинома до тех пор, пока не будет найден открытый слот.

Пример последовательности с использованием квадратичного зондирования:

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

Квадратичное зондирование впервые было введено Уордом Дугласом Маурером в 1968 году. [3]

Квадратичная функция

Пусть h ( k ) будет хэш-функцией , которая отображает элемент k в целое число в [0,  m −1], где m — размер таблицы. Пусть i позиция зонда для значения k задается функцией

где c 2 ≠ 0 (Если c 2 = 0, то h ( k , i ) деградирует до линейного зонда ). Для заданной хэш-таблицы значения c 1 и c 2 остаются постоянными.

Примеры:

uint64_t roundUp2 ( uint64_t v ){ v -- ; v |= v >> 1 ; v |= v >> 2 ; v |= v >> 4 ; v |= v >> 8 ; v |= v >> 16 ; v |= v >> 32 ; в ++ ; вернуть v ; }                           

Ограничения

Чередование знаков

Если знак смещения меняется (например, +1, −4, +9, −16 и т. д.), а количество блоков является простым числом, сравнимым с 3 по модулю 4 (например, 3, 7, 11, 19, 23, 31 и т. д.), то первые смещения будут уникальными (по модулю ). [ необходимо дальнейшее объяснение ] Другими словами, получается перестановка от 0 до , и, следовательно, всегда будет найден свободный блок, пока существует хотя бы один.

Ссылки

  1. ^ Кормен, Томас Х.; Лейзерсон, Чарльз Эрик; Ривест, Рональд Линн; Штейн, Клиффорд (2009). Введение в алгоритмы (3-е изд.). Кембридж, Массачусетс, Лондон, Англия: MIT Press. ISBN 978-0-262-53305-8.
  2. ^ Рихтер, Стефан; Альварес, Виктор; Диттрих, Йенс (2015). «Семимерный анализ методов хеширования и его влияние на обработку запросов». Труды VLDB Endowment . 9 (3): 96–107. doi :10.14778/2850583.2850585. ISSN  2150-8097.
  3. ^ Maurer, WD (1968). «Техника программирования: улучшенный хэш-код для разбросанного хранения». Communications of the ACM . 11 (1): 35–38. doi : 10.1145/362851.362880 . ISSN  0001-0782.
  4. ^ Искусство информатики Том 3 Сортировка и поиск, Глава 6.4, упражнение 20, Дональд Кнут

Внешние ссылки