Binäre Suchzeit Komplexität

Binäre Suchzeit Komplexität

Binäre Suche ist ein Divide-and-Conquer-Paradigma. Es sucht nach einem Element in einem sortierten Array. In diesem Artikel wird nur die Sortierung aufsteigend berücksichtigt. Das zu suchende Element wird als Zielwert bezeichnet. Der Zielwert kann im Array gefunden werden oder nicht.

Die Suche beginnt mit dem Vergleich des Zielwerts mit dem mittleren Element des sortierten Arrays. Wenn die Anzahl der Elemente im Array gleichmäßig ist, wird der Artikel mit der Hälfte der Nummer als mittlerer Element angesehen. Wenn der Zielwert dem mittleren Element entspricht, wurde der Zielwertindex gefunden. Wenn sie nicht gleich sind, ist der Zielwert entweder größer oder kleiner als der mittlere Element. Wenn es größer ist, wird die untere Hälfte des Arrays aufgegeben, damit die Suche in der oberen Hälfte fortgesetzt wird. Wenn es kleiner ist, wird die obere Hälfte des Arrays aufgegeben, damit die Suche in der unteren Hälfte fortgesetzt wird.

Die Suche wird fortgesetzt, indem die Hälfte erneut in zwei Teile teilt. Ein Vergleich zwischen dem Zielwert und dem mittleren Gegenstand dieser neuen Hälfte wird durchgeführt. Wenn sie nicht gleich sind, ist diese Hälfte wieder in zwei Teile unterteilt und aus den gleichen Gründen wurde die vorherige Hälfte geteilt. Wenn der Zielwert nicht mit dem neuen mittleren Element übereinstimmt, wird die Division fortgesetzt.

Wenn der Zielwert und ein Medianwert (Element) gleich sind, ist das erobern. Dort und dann stoppt die Suche. Wenn der Zielwert nicht im Array liegt.

Dieser Artikel zielt darauf ab, eine Wertschätzung zu geben, die als Zeitkomplexität für die Geschwindigkeit der binären Suche bezeichnet wird.

Artikelinhalt

  • Einführung - siehe oben
  • Binäre Suchabbildung
  • Zeitkomplexität und binäre Suche
  • Codierung in c
  • Abschluss

Binäre Suchabbildung

Betrachten Sie die sortierte Liste:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16

Wo die Ganzzahl 3 gesucht werden muss. Natürlich wird die Suche von Anfang an drei Operationen benötigen. Die Verwendung von Binärsuche erfolgt jedoch wie folgt vier Hauptvorgänge:

Der Zielwert ist 3. Die Aufteilung der Liste in zwei macht 8 das mittlere Element.

Ist 8 die gleiche wie 3?

NEIN. Da 3 weniger als 8 ist, konzentriert sich die Suche auf die untere Hälfte. Das ist ein Hauptvorgang, der durchgeführt wird.

Die Aufteilung in zwei macht 4 das neue mittlere Gegenstand.

Ist 4 der gleiche wie 3?

NEIN. Da 3 weniger als 4 ist, wird sich die Suche auf die neue untere Hälfte konzentrieren. Das ist der zweite Hauptvorgang, der durchgeführt wird.

Das Teilen in zwei macht 2 das neue mittlere Gegenstand.

Ist 2 die gleiche wie 3?

NEIN. Da 3 größer als 2 ist, konzentriert sich die Suche dann auf die neue obere Hälfte. Das ist der dritte Hauptvorgang, der durchgeführt wird.

Das Teilen in zwei macht 3 das neue mittlere Gegenstand, eine Hälfte (Unterliste) der Länge, eine. Der neue und letzte mittlere Artikel ist jetzt 3.

Ist 3 der gleiche wie 3?

Ja. Der Zielwert wurde gefunden. Das ist der vierte und letzte Hauptvorgang.

Wenn es 16 Elemente gibt, können maximal 4 Hauptvorgänge durchgeführt werden. Wenn es 16 Elemente gäbe und der Zielwert im Bereich lag und nicht gefunden werden konnte, hätten noch 4 Hauptvorgänge stattgefunden. Zum Beispiel in der folgenden Liste:

1, 2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18

Es gibt noch 16 Artikel. Ein Zielwert von 3 hätte mit dem Wert von 5 mit noch 4 Hauptoperationen beendet.

Zeitkomplexität und binäre Suche

Schlimmste Leistung

Die Worst-Case-Leistung bezieht sich auf den Fall, in dem der Zielwert am letzten Hauptvorgang gefunden wird oder der Zielwert im Wertbereich liegt und bei der letzten Hauptoperation nicht gefunden wird.

Wenn die Anzahl der Elemente 16 beträgt, beträgt die maximale Anzahl von Operationen immer 4.

16 = 24
4 = log2(16)

Sei n 16 sein. So,

4 = log2(N)

Wenn n 8 ist, wäre die maximale Anzahl von Operationen 3 = log2(8). Wenn n 32 wäre, wäre die maximale Anzahl von Operationen 5 = log2(32).

Die schlimmste Zeitkomplexität (relative Geschwindigkeit) für die binäre Suche soll:

O (Protokoll2(N))

Wo das große O und seine Klammern Protokoll haben2(n) ist die Notation für die Zeitkomplexität. Es ist einfach geschrieben als:

O (log n)

Best-Case-Leistung

Angenommen, der Zielwert betrug 8 für die erste Liste oben. In diesem Fall hätte die erste Hauptoperation die Position des Zielwerts gefunden. Dies ist die beste Leistung. Die zeitliche Komplexität für diese Best-Case-Aufführung wird geschrieben als:

O (1)

Wobei 1 eine Hauptoperation bedeutet.

Codierung in c

Eine C -Code -Binär -Suchfunktion ist:

#enthalten
int binarysearch (int arr [], int Ziel, int n)
int lodex = 0;
int upIndex = n - 1;
// Stellen Sie sicher, dass wir noch Elemente in der Liste haben, um nach in der Liste zu suchen
while (lodex target)
upIndex = MiddleInDX;
anders
lodex = MiddleInDX + 1;


// Geben Sie eine negative Zahl zurück, wenn wir das Ziel im Array nicht finden können
Return -1;

Der Lodex bedeutet den niedrigsten Index einer Hälfte (Unterliste). Der UPIndex bedeutet den obersten Index einer Hälfte (Unterliste). Am Anfang ist Lodex 0 und updex 15, wenn n 16 ist. Die Bedingung des Schleifens stellt sicher, dass die Teilung fortgesetzt wird, bis Lodex das gleiche wie UPIndex ist, wenn der Zielwert noch nicht gefunden wurde.

Eine geeignete C -Hauptfunktion für diesen Code ist:

int main (int argc, char ** argv)

int n = 16;
int target = 3;
int arr [] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16;
int indexfound = binarySearch (arr, target, n);
printf ("%d \ n", indexFound);
Rückkehr 0;

Abschluss

In diesem Artikel wurde die Komplexität der binären Suchzeit erörtert und Folgendes betont:

Die schlimmste Zeitkomplexität für binäre Suche ist:
O (log n)

Die Best-Case-Zeitkomplexität für binäre Suche ist:
O (1)