Interpolation search
• Линейный поиск находит элемент за O (n) раз,
Jump Search занимает O
(√ n) раз, а двоичный поиск занимает O (Log n) времени.
Поиск с интерполяцией является усовершенствованием по сравнению
с двоичным
поиском для экземпляров, в которых значения в
отсортированном массиве равномерно распределены. Двоичный
поиск всегда переходит к среднему элементу для проверки. С другой
стороны, поиск с интерполяцией может
идти в разные места в
соответствии со значением ключа, по которому выполняется поиск.
Например, если значение ключа ближе к
последнему элементу, поиск
с интерполяцией, скорее всего, начнется с конца.
Чтобы найти позицию для поиска, он использует следующую формулу.
index = low + [(val-lys[low])*(high-low) / (lys[high]-lys[low])]
• / Идея формулы - вернуть большее значение pos
// когда элемент для поиска ближе к arr [hi]. И
// меньшее значение по мере приближения к arr [lo]
pos = lo + [(x-arr [lo]) * (hi-lo) / (arr [привет] -arr [Lo])]
arr [] ==> Массив, в котором нужно искать элементы
x ==> Элемент
для поиска
lo ==> Начальный индекс в arr []
hi ==> Конечный индекс в arr []
• Остальная часть алгоритма интерполяции такая же, за
исключением приведенной выше логики разделения.
Шаг 1: В цикле вычислите значение «pos», используя формулу
положения датчика.
Шаг 2: Если это совпадение, вернуть индекс элемента и выйти.
Шаг 3: Если
элемент меньше, чем arr [pos], вычислить положение
зонда левой подматрицы. В противном случае вычислите то же
самое в правом подмассиве.
Шаг 4: повторяйте, пока не будет найдено совпадение или пока
подмассив не уменьшится до нуля.
•
Хеш-функция (англ.
hash function;
hash — «фарш
қилиш», «аралаштириш»), ёки
свёртки
Do'stlaringiz bilan baham: