Jump to content

Квадратичное зондирование

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

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

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

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

Квадратичная функция [ править ]

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

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

Примеры:

  • Если , то последовательность зондирования будет
  • Для м = 2 н хорошим выбором констант являются c 1 = c 2 = 1/2, поскольку все значения h ( k , i ) для i в [0, m −1] различны (фактически это перестановка на [0, м −1] [4] ). Это приводит к зондовой последовательности ( треугольные числа ), где значения увеличиваются на 1, 2, 3,...
  • Для простого числа m > 2 большинство вариантов выбора c 1 и c 2 сделают h ( k , i ) отличным для i в [0, ( m −1)/2]. Такие варианты включают c 1 = c 2 = 1/2, c 1 = c 2 = 1 и c 1 = 0, c 2 существует только m = 1. Однако для данного элемента /2 различных зондов, что требует других методов. чтобы гарантировать успешность вставки, когда коэффициент загрузки превышает 1/2.
  • Для , где m , n и p — целые числа, большие или равные 2 (переход в линейный зонд при p = 1), тогда дает цикл всех различных зондов. Его можно вычислить в цикле как: , и
  • Для любого m полный цикл с квадратичным зондированием может быть достигнут путем округления m до ближайшей степени 2 и вычисления индекса зондирования: и пропустить итерацию, когда . есть максимум пропущенные итерации, и эти итерации не обращаются к памяти, поэтому на большинстве современных процессоров это быстрая работа. Округление m можно вычислить следующим образом:
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++;
	return 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 . 9 (3): 96–107. дои : 10.14778/2850583.2850585 . ISSN   2150-8097 .
  3. ^ Маурер, WD (1968). «Техника программирования: улучшенный хэш-код для разбросанного хранилища» . Коммуникации АКМ . 11 (1): 35–38. дои : 10.1145/362851.362880 . ISSN   0001-0782 .
  4. ^ Искусство информатики, том 3, сортировка и поиск, глава 6.4, упражнение 20, Дональд Кнут

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 9d79a24415f618fc44cdc7ea48f34755__1701122880
URL1:https://arc.ask3.ru/arc/aa/9d/55/9d79a24415f618fc44cdc7ea48f34755.html
Заголовок, (Title) документа по адресу, URL1:
Quadratic probing - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)