Informatik

Binäre Suche: Ablauf, Beispiel und Laufzeit

Binäre Suche: Ablauf, Beispiel und Laufzeit
Binäre Suche: Ablauf, Beispiel und Laufzeit
Für Quiz, Lückentext, Lernkarten und Fortschritt ist JavaScript nötig. Alle Inhalte und Lösungen bleiben direkt lesbar.

Die binäre Suche findet einen Wert in einer sortierten Folge, indem sie den Suchbereich nach jedem Vergleich ungefähr halbiert. Dazu prüfst du immer das mittlere Element und entscheidest, ob nur links oder nur rechts weitergesucht werden muss.

Deine Lernziele

Hake ab, was du schon kannst — und komm am Ende hierher zurück!

Warum muss die Folge sortiert sein?

Stell dir vor, du vergleichst den Suchwert mit dem mittleren Element. Nur bei einer sortierten Folge kannst du daraus sicher ableiten, welche Hälfte nicht mehr infrage kommt.

Ist der Suchwert kleiner als der mittlere Wert, kann er nur links davon liegen. Ist er größer, kann er nur rechts davon liegen. Genau dieses Ausschließen einer ganzen Hälfte macht die binäre Suche schnell.

Definition

Suchbereich

Der Suchbereich umfasst alle Positionen, an denen der gesuchte Wert noch liegen kann. Seine Grenzen heißen hier links und rechts; beide gehören zum Bereich.

Binäre Suche und Sortierung müssen dieselbe Ordnung verwenden. In einem nach Namen sortierten Telefonbuch kannst du binär nach einem Namen suchen, aber nicht unmittelbar nach einer Telefonnummer.

Merke

Ohne passende Sortierung darfst du keine Hälfte ausschließen. Dann kann die binäre Suche ein vorhandenes Element übersehen.

Teste dich
Frage 1 von 1LeichtIn welcher Folge darfst du unmittelbar binär nach der Zahl 18 suchen?
Lösung: [4, 9, 18, 27, 40] — Die hier erklärte Variante setzt eine von links nach rechts aufsteigend sortierte Folge voraus.
Wie läuft die binäre Suche ab?

Für ein Array mit den Indizes 0 bis n - 1 setzt du zunächst links = 0 und rechts = n - 1.

Dann wiederholst du diese Schritte, solange links <= rechts gilt:

  1. Berechne die Mitte mit mitte = links + (rechts - links) // 2. // bedeutet ganzzahlige Division mit Abrunden.
  2. Vergleiche den Wert an der Position mitte mit dem Suchwert.
  3. Bei Gleichheit ist die Suche erfolgreich.
  4. Ist der mittlere Wert größer, setze rechts = mitte - 1.
  5. Ist der mittlere Wert kleiner, setze links = mitte + 1.

Die Mitte selbst wurde bereits geprüft. Deshalb wird sie durch mitte - 1 oder mitte + 1 aus dem neuen Bereich entfernt. Ohne dieses Vorbeibewegen könnten Grenzen stehen bleiben und die Schleife endlos laufen.

Die verwendete Mittenformel ist außerdem robuster als (links + rechts) / 2, weil die Addition der beiden möglicherweise großen Indizes vermieden wird.

Beispiel

Gesucht ist 75 in der sortierten Liste

[4, 12, 15, 15, 21, 27, 40, 41, 70, 75, 75, 99].

Die Indizes reichen von 0 bis 11.

SchrittlinksrechtsmitteWertEntscheidung
101152775 > 27, also rechts weitersuchen
261187075 > 70, also rechts weitersuchen
39111075gefunden

Die Suche liefert hier Index 10. Da 75 zweimal vorkommt, hätte eine andere zulässige Mittenregel auch die andere passende Position liefern können.

Lückentext

Wähle in jeder Lücke die passende Form und prüfe anschließend deine Antworten.

Ist der mittlere Wert größer als das Ziel, wird der Rand verschoben. Ist er kleiner, wird der Rand verschoben. Bei Gleichheit ist der Wert . Die geprüfte Mitte wird durch mitte - 1 oder mitte + 1 aus dem neuen Suchbereich .

Lösungen: Lücke 1: rechte; Lücke 2: linke; Lücke 3: gefunden; Lücke 4: entfernt. Nach jedem Vergleich bleibt nur die Hälfte übrig, in der der Wert aufgrund der Sortierung noch liegen kann.
Woran erkennst du eine erfolglose Suche?

Ein Wert fehlt, wenn der Suchbereich leer wird. Das erkennst du an links > rechts: Der linke Rand liegt dann rechts vom rechten Rand, also bleibt keine ungeprüfte Position übrig.

Beispiel

Nun wird 76 in derselben Liste gesucht.

SchrittlinksrechtsmitteWertEntscheidung
1011527links = 6
2611870links = 9
39111075links = 11
411111199rechts = 10

Danach gilt links = 11 und rechts = 10. Der Bereich ist leer, also kommt 76 nicht vor. Zugleich zeigt links = 11 die Position, an der 76 eingefügt werden müsste, damit die Liste sortiert bleibt.

Programme können einen Misserfolg unterschiedlich melden, etwa mit -1, None oder einer Einfügeposition. Diese Rückgabekonvention gehört zur jeweiligen Implementierung; das Abbruchkriterium bleibt der leere Suchbereich.

Gut zu wissen

Duplikate sind erlaubt. Die Grundform der binären Suche verspricht jedoch nur irgendeine passende Position. Soll ausdrücklich das erste oder letzte Vorkommen gefunden werden, muss der Algorithmus erweitert werden.

Teste dich
Frage 1 von 1MittelNach einem Vergleich gilt links = 7 und rechts = 6. Was folgt daraus?
Lösung: Der Wert ist im bisherigen Suchbereich nicht vorhanden. — Weil links > rechts gilt, ist der Suchbereich leer und die Suche endet erfolglos.
Warum ist die binäre Suche schnell?

Eine lineare Suche prüft die Elemente der Reihe nach und benötigt im ungünstigsten Fall bis zu n Vergleiche. Die binäre Suche verwirft nach jedem Vergleich ungefähr die Hälfte der noch möglichen Positionen.

Bei 12 Elementen genügen im schlechtesten Fall 4 Vergleiche. Das passt zur Formel

$$\left\lceil\log_2(n+1)\right\rceil$$

Denn für n = 12 gilt: 2³ = 8 < 13 <= 16 = 2⁴. Daher ist die aufgerundete Zweierlogarithmus-Zahl 4.

Allgemein wächst die Laufzeit im schlechtesten Fall wie

$$\mathcal O(\log n)$$

Der beste Fall benötigt nur einen Vergleich: Das zuerst geprüfte mittlere Element ist bereits der Suchwert.

Definition

Laufzeit

Die Laufzeit beschreibt hier, wie die Zahl der nötigen Vergleichsschritte mit der Größe n der Eingabe wächst. Sie ist nicht mit einer konkreten Zeit in Sekunden gleichzusetzen.

Vertiefung: Iteration und Rekursion

Eine iterative Umsetzung aktualisiert links und rechts in einer Schleife und benötigt konstanten zusätzlichen Speicher, also $\mathcal O(1)$.

Eine rekursive Umsetzung halbiert denselben Bereich durch Funktionsaufrufe. Dafür werden Aufrufzustände gespeichert; der zusätzliche Speicherbedarf wächst bis zu $\mathcal O(\log n)$.

Der Geschwindigkeitsvorteil gilt nur, wenn die Daten bereits passend sortiert sind und direkt auf das mittlere Element zugegriffen werden kann. Bei einer einfachen verketteten Liste kostet schon das Erreichen der Mitte zusätzlichen Aufwand. Muss eine unsortierte Folge erst sortiert werden, gehört auch dieser Aufwand zur Gesamtbetrachtung.

Teste dich
Frage 1 von 1SchwerEine Liste wird einmal sortiert und danach sehr oft durchsucht. Warum kann binäre Suche passend sein?
Lösung: Der einmalige Sortieraufwand kann sich durch viele logarithmische Suchvorgänge lohnen. — Bei vielen Suchen kann der Vorteil der wiederholten Halbierung den vorherigen Sortieraufwand ausgleichen. Für die Entscheidung muss der gesamte Nutzungskontext betrachtet werden.
Karteikasten
Karteikasten

Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.

Alles auf einen Blick
Mindmap
  • Binäre Suche
    • Voraussetzung
      • passend sortierte Folge
      • direkter Zugriff auf die Mitte
    • Vergleich mit der Mitte
      • kleiner: links weitersuchen
      • größer: rechts weitersuchen
      • gleich: Position gefunden
    • Abbruch
      • Fund bei Gleichheit
      • Misserfolg bei `links > rechts`
    • Eigenschaften
      • ungefähr halbierter Suchbereich
      • Laufzeit $\mathcal O(\log n)$
      • Duplikatposition nicht festgelegt
Abschluss-Check
Teste dich
Frage 1 von 3LeichtWelche Bedingung erlaubt es, nach einem Vergleich eine ganze Hälfte auszuschließen?
Lösung: Die Folge ist nach dem verwendeten Vergleichsschlüssel sortiert. — Die Ordnung zeigt, auf welcher Seite kleinere und größere Werte liegen können.
Frage 2 von 3MittelIn einer Suche gilt links = 4, rechts = 8 und mitte = 6. Der Wert an Index 6 ist größer als das Ziel. Welche Aktualisierung ist richtig?
Lösung: rechts = 5 — Weil das Ziel kleiner ist, bleibt nur der Bereich links von der Mitte: Die neue rechte Grenze ist mitte - 1 = 5.
Frage 3 von 3SchwerDu suchst häufig nach Telefonnummern in einer ausschließlich nach Namen sortierten Tabelle. Welche Aussage trifft zu?
Lösung: Für eine binäre Suche nach Telefonnummern braucht die Tabelle eine passende Ordnung nach Telefonnummern. — Eine Hälfte darf nur ausgeschlossen werden, wenn die Ordnung Auskunft über den gesuchten Schlüssel gibt.

Du beherrschst die binäre Suche, wenn du vor dem Start die Sortierung prüfst, nach jedem Vergleich die richtige Grenze an der Mitte vorbeibewegst und bei links > rechts sicher auf Misserfolg schließt.

Passend dazu