Interpolationssuche
- Interpolations-Suchalgorithmus
- Beispiel für die Interpolationssuche
- Implementierung des Interpolationssuchalgorithmus
- Interpolationssuchalgorithmus Komplexität
Die Interpolationssuche ist ein schneller und effizienter Suchalgorithmus. Er verbessert den binären Suchalgorithmus für Szenarien, in denen Arrayelemente gleichmäßig über das sortierte Array verteilt sind. Er arbeitet an der Sondierungsposition des gesuchten Wertes. Im Gegensatz zur binären Suche geht er nicht immer zur Mitte des Arrays, sondern kann zu jeder beliebigen Position gehen, abhängig vom Wert des zu suchenden Schlüssels. Wir vergleichen den Wert an der geschätzten Position und reduzieren den Suchraum auf den Teil nach oder vor ihm. Wenn wir z. B. ein Wort im Dictionary suchen, blättern wir die Seiten entsprechend der Position der Buchstaben im Dictionary und nicht, indem wir den Suchraum jedes Mal in zwei Hälften aufteilen.
Interpolations-Suchalgorithmus
Nehmen wir an, wir haben ein unsortiertes Array A[]
, das n
Elemente enthält, und wir wollen ein bestimmtes Element X
finden.
-
Setzen Sie
lo
auf0
,mid
auf-1
undhi
aufn-1
. -
Während
lo
<=hi
und X im Bereich zwischenlo
undhi
liegt, d. h.X >= A[lo]
undX <= A[hi]
.- Berechnen Sie
mid
mit Hilfe der Formel für die Sondenposition -mid = lo + (X - A[lo]) * (hi - lo) / (A[hi] - A[lo])
- Wenn das Element an der Sondenposition kleiner als das Zielelement ist, wird nach rechts verschoben. Wenn
A[mid]
<X
setzen Sielo
alsmid + 1
. - Ansonsten, wenn das Element größer als das Zielelement ist, nach links verschieben. Wenn
A[Mitte]
>X
, setzehi
alsMitte-1
. - Andernfalls haben wir das Element gefunden und geben
mid
zurück
- Berechnen Sie
-
Wenn
lo
==hi
, ist nur ein Element übrig, prüfen Sie, ob es das Zielelement ist, d.h. obA[lo]
==X
.- Wenn
true
, dann giblo
zurück. - Andernfalls wird
-1
zurückgegeben.
- Wenn
Beispiel für die Interpolationssuche
Angenommen, wir haben das Array: (1, 3, 7, 8, 11, 15, 17, 18, 21)
, und wir wollen X - 18
finden.
-
Setzen Sie
lo
=0
,mid
=-1
undhi
=8
. -
Berechnen Sie
mid
als6
, indem Sie die Formel -0 + (18 - 1)*(8 - 0)/(21-1)
verwenden. -
Dann vergleichen wir
A[6]
mitX
, um zu sehen, dass es kleiner ist und setzenlo
als7
. -
Berechnen Sie
mid
mit7 + (18 - 18)*(8 - 7)/(21 - 18)
. -
Dann vergleichen wir
A[7]
mitX
, um zu sehen, dass es gleich18
ist und geben den Index7
zurück.
Implementierung des Interpolationssuchalgorithmus
#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;
}
Interpolationssuchalgorithmus Komplexität
Zeitkomplexität
- Durchschnittlicher Fall
Die Zeitkomplexität des Algorithmus im durchschnittlichen Fall liegt in der Größenordnung von O(log(logn))
. Dies ist der Fall, wenn alle Elemente innerhalb des Arrays gleichmäßig verteilt sind.
- Bester Fall
Der Best-Case tritt auf, wenn das gesuchte Element das erste Element ist, das durch die Interpolationssuche untersucht wird. Die Best-Case-Zeitkomplexität des Algorithmus ist O(1)
.
- Schlechtester Fall
Der Worst-Case tritt auf, wenn die numerischen Werte der Ziele exponentiell ansteigen. Die Worst-Case-Zeitkomplexität des Algorithmus ist O(n)
.
Raumkomplexität
Die Raumkomplexität dieses Algorithmus ist O(1)
, da er außer temporären Variablen keine weitere Datenstruktur benötigt.
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