При индексно-последовательномпоиске организуется две таблицы:
· таблица данных со своими ключами (упорядоченная по возрастанию)
· таблица индексов, которая тоже состоит из ключей данных, но эти ключи взяты из основной таблицы через определенный интервал (рис. 5.3).
Сначала производится последовательный поиск в таблице индексов по заданному аргументу поиска. Затем проходим ключ, который оказался меньше заданного и устанавливаем нижнюю границу поиска в основной таблице - low, а затем - верхнюю – hil на которой (kind > key).
Например, key = 101.
Поиск идет не по всей таблице, а от low до hi.
рис. 26 – индексно-последовательный поиск
Эффективность индексно-последовательного поиска
Если считать равновероятным появление всех случаев, то эффективность поиска можно рассчитать следующим образом:
Например, m = n/р, где т- размер индекса; р - размер шага, тогда
Продифференцируем Q по р и приравняем производную к нулю:
dQ/dp=(d/dp) (n/2p+p/2+]) = -n/2р2 + 1/2 = 0
Следовательно р2= n; Ропт =
Подставив ропт в выражение для Q, получим следующее количество сравнений:
Порядок эффективности индексно-последовательного поиска О ()
Существует некоторая вероятность поиска того или иного элемента в таблице. Пусть в таблице данный элемент существует. Тогда вся таблица поиска может быть представлена как система с дискретными состояниями, а вероятность нахождения искомого элемента - p(i),т.еi - го состояния системы.
Количество сравнений при поиске в таблице, представленной как дискретная система, представляет собой математическое ожидание значения дискретной случайной величины, которая определяется вероятностями состояний и номерами состояний системы.
Z=Q=1p(l)+2p(2)+3p(3) +... +nр(n)
Желательно, чтобы р(1)≥р(2)≥р(3) ≥...≥р(п) – это минимизирует количество сравнений и увеличивает эффективность.
Последовательный поиск начинается с первого элемента, значит на это место надо поставить элемент, к которому чаше всего обращаются (с наибольшей вероятностью поиска).