Búsqueda de interpolación
- Algoritmo de búsqueda de interpolación
- Ejemplo de búsqueda de interpolación
- Implementación del algoritmo de búsqueda de interpolación
- Complejidad del algoritmo de búsqueda de interpolación
La búsqueda por interpolación es un algoritmo de búsqueda rápido y eficiente. Mejora el algoritmo de búsqueda binaria para escenarios donde los elementos del array se distribuyen uniformemente sobre el array ordenada. Funciona en la posición de palpación del valor requerido. A diferencia de la búsqueda binaria, no siempre va a la mitad del array, pero puede ir a cualquier posición dependiendo del valor de la clave que se buscará. Comparamos el valor en la posición estimada y reducimos el espacio de búsqueda a la parte posterior o anterior. Por ejemplo, cuando buscamos una palabra en el diccionario, pasamos las páginas de acuerdo con la posición de las letras en su interior y no dividiendo el espacio de búsqueda en dos mitades cada vez.
Algoritmo de búsqueda de interpolación
Supongamos que tenemos un array sin clasificar A[]
que contiene n
elementos y queremos encontrar un elemento dado X
.
-
Establece
lo
como0
,mid
como-1
yhi
comon-1
. -
Mientras que
lo
<=hi
y X se encuentra en el rango entrelo
yhi
, es decir,X >= A[lo]
yX <= A[hi]
.- Calcule
mid
utilizando la fórmula para la posición de la sonda -mid = lo + (X - A[lo]) * (hi - lo) / (A[hi] - A[lo])
- Si el elemento en la posición de la sonda es menor que el elemento objetivo, muévase hacia la derecha. Si
A[mid]
<X
establezcalo
comomid + 1
. - De lo contrario, si el elemento es mayor que el elemento objetivo, muévase hacia la izquierda. Si
A[mid]
>X
, establezcahi
comomid-1
. - De lo contrario, hemos encontrado el elemento y devolvemos
mid
- Calcule
-
Si
lo
==hi
, solo queda un elemento, compruebe si es el elemento de destino, es decir, siA[lo]
==X
.- Si es
true
, devuelvelo
. - Si no, devuelve
-1
.
- Si es
Ejemplo de búsqueda de interpolación
Supongamos que tenemos el array (1, 3, 7, 8, 11, 15, 17, 18, 21)
, y queremos encontrar X - 18
.
-
Establecer
lo
=0
,mid
=-1
yhi
=8
. -
Calcula
mid
como6
utilizando la fórmula -0 + (18 - 1)*(8 - 0)/(21-1)
. -
Luego comparamos
A[6]
conX
para ver que es más pequeño y establecemoslo
como7
. -
Calcula
mid
usando7 + (18 - 18) * (8 - 7) / (21 - 18)
. -
Luego comparamos
A[7]
conX
para ver que es igual a18
y devolvemos el índice7
.
Implementación del algoritmo de búsqueda de interpolación
#include <bits/stdc++.h>
using namespace std;
int interpolation_search(int arr[], int n, int X) {
int lo = 0;
int hi = n - 1;
int mid;
while ((arr[hi] != arr[lo]) && (X >= arr[lo]) && (X <= arr[hi])) {
mid = lo + ((X - arr[lo]) * (hi - lo) / (arr[hi] - arr[lo]));
if (arr[mid] < X)
lo = mid + 1;
else if (X < arr[mid])
hi = mid - 1;
else
return mid;
}
if (X == arr[lo])
return lo;
else
return -1;
}
int main(void) {
int n = 9;
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int x = 4;
int result = interpolation_search(arr, n, x);
if (result == -1) {
cout << "Element not found !!";
} else
cout << "Element found at index " << result;
return 0;
}
Complejidad del algoritmo de búsqueda de interpolación
Complejidad del tiempo
- Caso promedio
La complejidad del tiempo de caso promedio del algoritmo es del orden de O(log (logn))
. Ocurre cuando todos los elementos dentro del array se distribuyen uniformemente.
- Mejor caso
El mejor de los casos ocurre cuando el elemento que estamos buscando es el primer elemento sondeado por búsqueda de interpolación. La complejidad de tiempo del algoritmo en el mejor de los casos es O(1)
.
- Peor caso
El peor de los casos ocurre cuando los valores numéricos de los objetivos aumentan exponencialmente. La complejidad temporal del algoritmo en el peor de los casos es O(n)
.
Complejidad espacial
La complejidad espacial de este algoritmo es O(1)
porque no requiere ninguna estructura de datos más que variables temporales.
Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.
LinkedIn