Para aquellos que no están familiarizados con la búsqueda de interpolación, es un método para buscar un valor en una matriz ordenada que es potencialmente más rápido que la búsqueda binaria. Observa el primer y último elemento y (suponiendo que el contenido de la matriz esté uniformemente distribuido) interpola linealmente para predecir la ubicación.Búsqueda de interpolación en cadenas
Por ejemplo: tenemos una matriz de longitud 100 con matriz [0] = 0 y matriz [99] = 99. Si estamos buscando a 80, es intuitiva para tratar array [80] sobre array [50], y si la matriz está cerca distribuido uniformemente, el tiempo de ejecución esperado se reduce a log(log(N))
Para los números, la ubicación para comprobar se define por la ecuación: low + ((toFind - sortedArray[low]) * (high - low + 1))/(sortedArray[high] - sortedArray[low])
.
Un ejemplo común utilizado para mostrar la naturaleza intuitiva de la búsqueda de interpolación es: imaginar tratar de encontrar la palabra 'amarillo' en un diccionario. No usaría la búsqueda binaria y llegaría al punto medio. Por el contrario, iría a la ubicación esperada.
Los seres humanos pueden interpolar cadenas linealmente de forma natural, pero no entiendo cómo codificarlo. ¿Cómo se interpolan linealmente las cadenas?
Puntos buenos por todas partes. +1 –
La complejidad adicional es 2 mult/div + 5 add/sub. Lo he probado y, sí, es un poco más lento que la búsqueda binaria (si N no es ridículo). Pero si la comparación no es trivial (como en el caso de las cadenas), entonces puede valer la pena. – user108088
@ user108088, la complejidad también está en los cálculos de distancia, que tampoco serán triviales en el caso de las cadenas. Ver mi edición –