Was ist Binäre Suche (Binary Search)?

Suchverfahren für sortierte Daten, das den Zielwert mit dem mittleren Element vergleicht und den Suchbereich jedes Mal halbiert. Es findet einen Wert unter n Elementen mit höchstens ⌊log₂ n⌋ + 1 Vergleichen, die Komplexität ist also O(log n). Die Daten müssen sortiert sein.

Japanische Bezeichnung: 二分探索

„Binäre Suche (Binary Search)“ kommt in 4 Übungsfragen aus 2 Themen vor, z. B. Datenstrukturen und Algorithmen, Softwareentwicklung und Projektmanagement.

Fachgebiet: Datenstrukturen und Algorithmen

Jetzt üben: Fragen zu Binäre Suche (Binary Search)

Welche Voraussetzung muss erfüllt sein, um die binäre Suche zu verwenden, die den Zielwert mit dem mittleren Element vergleicht und den Suchbereich jedes Mal halbiert?

  1. ADie Zahl der Datenelemente muss eine Zweierpotenz sein
  2. BDie Daten müssen nach dem Schlüssel sortiert sein
  3. CDie Daten dürfen keine doppelten Werte enthalten
Antwort und Erläuterung anzeigen

Antwort: B. Die Daten müssen nach dem Schlüssel sortiert sein

Die binäre Suche entscheidet anhand des Vergleichs mit dem mittleren Element, ob der Zielwert in der vorderen oder hinteren Hälfte liegt, und halbiert den Bereich. Dieser Schluss gilt nur, weil die Daten sortiert sind; auf ein unsortiertes Array lässt sich die binäre Suche nicht anwenden. Die Zahl der Elemente muss keine Zweierpotenz sein; wählt man die Mitte zum Beispiel als (untere Grenze + obere Grenze) ÷ 2 abgerundet, funktioniert sie bei jeder Größe. Doppelte Werte sind ebenfalls kein Problem: Einer der passenden Werte wird gefunden (um das erste Vorkommen zu finden, ist ein kleiner Zusatzschritt nötig).

Auf 1000 verschiedene, aufsteigend sortierte Werte wird eine binäre Suche angewendet. Ein Vergleich liefert jeweils „gleich“, „kleiner“ oder „größer“. Wie viele Vergleiche sind höchstens nötig, erfolgreiche und erfolglose Suchen zusammengenommen?

  1. A10
  2. B32
  3. C500
Antwort und Erläuterung anzeigen

Antwort: A. 10

Jeder Vergleich halbiert den Suchbereich ungefähr, und es gilt 2¹⁰ = 1024 ≥ 1000; nach höchstens 10 Vergleichen ist der Bereich also erschöpft (⌊log₂ 1000⌋ + 1 = 10). Die Komplexität ist O(log n), und selbst bei 1 Million Werten genügen höchstens 20 Vergleiche. 32 entspricht √1000 ≈ 31,6, und 500 liegt nahe am Mittelwert einer linearen Suche (etwa n/2). Zu beachten ist allerdings, dass die binäre Suche sortierte Daten braucht und das Sortieren selbst O(n log n) kostet.

„Binäre Suche (Binary Search)“ in den Erläuterungen

Fragen mit „Binäre Suche (Binary Search)“ (4)

  1. Welche Voraussetzung muss erfüllt sein, um die binäre Suche zu verwenden, die den Zielwert mit dem mittleren Element vergleicht und den Suchbereich jedes Mal halbiert?
  2. Auf 1000 verschiedene, aufsteigend sortierte Werte wird eine binäre Suche angewendet. Ein Vergleich liefert jeweils „gleich“, „kleiner“ oder „größer“. Wie viele Vergleiche sind höchstens nötig, erfolgreiche und erfolglose Suchen zusammengenommen?
  3. Eine binäre Suche sucht 38 im aufsteigend sortierten Array a[0] bis a[9] = 3, 8, 12, 17, 23, 31, 38, 45, 52, 60. Der Suchbereich beginnt mit lo = 0 und hi = 9, und die mittlere Position ist (lo + hi) ÷ 2 abgerundet. Welche Folge gibt die Elemente, die mit 38 verglichen werden, in der richtigen Reihenfolge an?
  4. Nach einer Firmware-Version, die bekanntermaßen korrekt funktioniert, gibt es 1000 Commits, und der neueste Commit enthält einen Fehler. Der Fehler wurde durch einen einzigen Commit eingeführt und tritt in jedem späteren Commit auf. Wie oft muss die Firmware höchstens gebaut und getestet werden, wenn der verursachende Commit wie mit git bisect durch binäre Suche ermittelt wird?

Verwandte Begriffe

Array Git Binärer Heap (Binary Heap) Binärer Suchbaum (Binary Search Tree) Breitensuche (Breadth-First Search) Dijkstra-Algorithmus Dynamische Programmierung Greedy-Algorithmus Hashtabelle (Hash Table) Rekursion

Zur Glossarübersicht