Мультипликативный бинарный поиск - Multiplicative binary search

Мультипликативный бинарный поиск
Мультипликативный двоичный поиск Depiction.svg
Визуализация алгоритма мультипликативного двоичного поиска, где 7 - целевое значение.
Учебный классАлгоритм поиска
Структура данныхМножество
Худший случай спектакльО(бревно п)
Лучший случай спектакльО(1)
Средний спектакльО(бревно п)
Худший случай космическая сложностьО(1)

В Информатика, мультипликативный двоичный поиск это вариант бинарный поиск который использует определенную перестановку ключей в массиве вместо сортированного порядка, используемого обычным двоичным поиском.[1]Мультипликативный двоичный поиск был впервые описан Томасом Стэндишем в 1980 году. Этот алгоритм был первоначально предложен для упрощения вычисления индекса средней точки на небольших компьютерах без эффективных операций деления или сдвига. тайник -дружественный характер мультипликативного двоичного поиска делает его подходящим для вне ядра Поиск по блочно-ориентированный хранение как альтернатива B-деревья и B + деревья. Для оптимальной производительности фактор ветвления B-дерева или B + -дерева должны соответствовать размеру блока файловая система что он хранится. Перестановка, используемая при мультипликативном двоичном поиске, помещает оптимальное количество ключей в первое (корень ) независимо от размера блока.

Мультипликативный бинарный поиск используется некоторыми оптимизация компиляторов реализовать операторы переключения.[2][3]

Алгоритм

Мультипликативный двоичный поиск работает с переставленным отсортированным массивом. Ключи хранятся в массиве в последовательности уровней соответствующих сбалансированных двоичное дерево поиска Это помещает первую точку бинарного поиска в качестве первого элемента в массиве. Вторые опорные точки размещаются на следующих двух позициях.

Учитывая массив А из п элементы со значениями А0 ... Ап−1, и целевое значение Т, следующее подпрограмма использует мультипликативный двоичный поиск, чтобы найти индекс Т в А.

  1. Набор я до 0
  2. если яп, поиск завершается неудачно.
  3. еслия = Т, поиск завершен; возвращаться я.
  4. еслия < Т, набор я до 2 ×я + 1 и перейти к шагу 2.
  5. еслия > Т, набор я до 2 ×я + 2 и переходите к шагу 2.

Смотрите также

Цитаты

  1. ^ Стэндиш, Томас А. (1980). «Глава 4.2.2: Поиск по упорядоченной таблице». Методы структуры данных. Эддисон-Уэсли. стр.136–141. ISBN  978-0201072563.
  2. ^ Сэйл, Роджер А. (17 июня 2008 г.). «Анализ супероптимизатора при генерации кода с несколькими ветвями» (PDF). Материалы саммита разработчиков GCC: 103–116. Получено 4 марта 2017.
  3. ^ Спулер, Дэвид А. (январь 1994 г.). Генерация кода компилятора для выражений многосторонних переходов как задача статического поиска (Технический отчет). Департамент компьютерных наук, Университет Джеймса Кука, Австралия. 94/03.