In einem sortierten Array mit keine Duplikate Werte, können wir die Interpolationssuche verwenden, um zu finden, ob es einen festen Punkt in einem Array wie Array [i] == i?Ist es möglich, eine Interpolationssuche durchzuführen, um einen festen Punkt in einem Array zu finden?
der Code für die Interpolation Suche Dies ist:
public static int interpolationSearch(int[] array, int x) {
if (array == null || array.length==0) {
return;
}
int low = 0;
int high = array.length - 1;
int mid;
while (array[low] != array[high] && x >= array[low] && x <= array[high]) {
mid = low + ((x - array[low]) * (high - low)/(array[high] - array[low]));
if (array[mid] < x)
low = mid + 1;
else if (x < array[mid])
high = mid - 1;
else
return mid;
}
if (x == array[low])
return low ;
else
return -1;
}
ich oft finden, dass wir die binäre Suche in einem Array verwenden, um einen festen Punkt zu finden, die es in O (log (n)) getan . Aber da die Interpolationssuche "nur" eine verbesserte Version der binären Suche ist, ist es theoretisch möglich, sie zu verwenden, um diesen Punkt zu finden? Ich versuchte naiv, x im obigen Code und in der Interpolationsformel zu entfernen, aber es liefert nicht immer das korrekte Ergebnis. Ich weiß nicht, ob es eine andere Beziehung dafür gibt oder ob wir es wirklich mit Interpolation machen können.
Welche Sprache ist das? Welche Probleme haben Sie mit dem Code? – Bergi
Ja, Sie können die Interpolationssuche für sortierte Ganzzahlen verwenden. Warum könntest du das nicht? – Bergi
@Bergi, es ist Java. Das Problem bei der Interpolationsformel ist, dass wir nach einem Wert in einem sortierten Array suchen, das wir BEREITS bereits wissen (was ich oben "x" genannt habe). Aber wenn wir schauen, ob ein Fixpunkt existiert, suchen wir nicht im Voraus nach einem festen Wert, wir haben keinen Wert für das x. Das hat mich verwirrt. Ich weiß nicht, ob es dir jetzt klar ist? – salamanka44