Изменения

Перейти к: навигация, поиск

Участник:Shovkoplyas Grigory

7 байт убрано, 17:45, 15 июня 2014
Нет описания правки
== Идея ==
[[Файл:interpolation_search_from_gshark.png|thumb|450px|right|Размещение разделительного элемента]]
Рассмотрим задачу: найти слово в словаре. Если оно начинается на букву "А", то никто не будет искать его в середине, а откроет словарь ближе к началу. В чём разница между алгоритмом человека и другими? Отличие заключается в том, что алгоритмы вроде двоичного поиска не делают различий между "немного больше" и "существенно больше".
== Алгоритм ==
Пусть <tex> a </tex> {{---}} отсортированный массив чисел из <tex> n </tex> чисел, <tex> x </tex> {{---}} значение, которое нужно найти. Поиск происходит подобно [[Целочисленный двоичный поиск|двоичному поиску]], но вместо деления области поиска на две примерно равные части, интерполирующий поиск производит оценку новой области поиска по расстоянию между ключом и текущим значением элемента. Если известно, что <tex> x </tex> лежит между <tex> a_l </tex> и <tex> a_r </tex>, то следующая проверка выполняется примерно на расстоянии <tex dpi = "170"> \frac{x - a_l}{a_r - a_l} \cdot</tex> <tex> (r - l) </tex> от <tex> l </tex>.
[[Файл:interpolation_search_from_gshark.png|450px|center|Размещение разделительного элемента]]
=== Псевдокод ===
<code style = "display: inline-block;">
'''function''' interpolationSearch(a : '''int[]''', key : '''int''') <font color=green> // a должен быть отсортирован </font>
69
правок

Навигация