Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Интерполяционный поиск






Данный метод, также как и бинарный поиск, требует чтобы массив был упорядочен по возрастанию или убыванию. Работа этого метода также аналогична предыдущему, с той только разницей, что на каждом шаге рассматривается элемент, находящийся не в середине текущей части массива, а в позиции, которая находится от начальной на расстоянии, определяемом по формуле:

Здесь r и l — соответственно правая и левая граница области поиска, k — искомый элемент, al и ar - соответственно левый и правый элемент области поиска.

 

Рассмотрим пример. Пусть дан массив, упорядоченный по возрастанию.

                 

Пусть требуется найти число k=22. Это число больше крайнего левого и меньше крайнего правого элементов. Следовательно, существует возможность найти его в массиве.

В данном примере l=1, r=9 (областью поиска является весь массив от первого до 9-го элемента включительно, al=2, ar=36

Подставим данные в формулу для вычисления номера элемента.

P=(9 — 1) * (22 — 2) / (36 — 2);

P=8*20/34;

P=4, 7; (для определенности округлим в б о льшую сторону, P=5.

Рассмотрим элемент с номером l+P=6. Этот элемент равен 16 и он меньше искомого числа. Следовательно, поиск необходимо продолжить в правой части массива (теперь l будет равно 6,. al=16).

                 

 

Вычислим шаг по формуле

P=(9 — 6)*(22 — 16) / (36 — 16);

P=3*6/20;

P=0, 9 (округлим P в большую сторону, P=1).

Рассмотрим элемент номер 7. Он равен искомому числу, поиск окончен.

 

Некоторые сложности могут возникнуть при реализации этого метода, например, в случае когда исходный массив выглядит так:

                 

Тогда в знаменателе формулы получается довольно большое число, которое при маленьких k дает шаг порядка сотых или даже тысячных. В этом случае необходимо округление P в большую сторону. Поэтому данный метод излагается здесь скорее как некое полезное упражнение.

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

Для олимпиадного программирования более чем достаточно бинарного поиска, но зато доведенного до идеального написания.


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал