edubun
Deutsch

Suchen: lineare und binäre Suche

Um einen Namen in einer sortierten Liste mit einer Million Einträgen zu finden, braucht die binäre Suche nie mehr als 20 Prüfungen.

Einen Wert suchen

Suchen ist das Problem, herauszufinden, wo ein Wert in einer Sammlung steht, oder zu erfahren, dass er nicht da ist. Dein Handy tut das, wenn du den Namen eines Kontakts eintippst, ein Laden, wenn er prüft, ob ein Artikel vorrätig ist, und eine Rechtschreibprüfung bei jedem Wort, das du tippst. Die Eingabe ist eine Liste und ein Zielwert. Die Ausgabe ist die Position des Ziels oder ein Zeichen wie -1 für „nicht gefunden“.

Lineare Suche: einer nach dem anderen

Das einfachste Verfahren beginnt links und prüft einen Wert nach dem anderen, bis es das Ziel findet oder die Liste zu Ende ist. Das ist die lineare Suche. Sie funktioniert mit jeder Liste, ob sortiert oder nicht. Ihr Aufwand hängt vom Glück ab: Steht das Ziel vorn, reicht eine Prüfung. Steht es hinten oder fehlt es, prüfst du jeden Wert. Bei einer Liste mit n Werten sind es im schlechtesten Fall n Prüfungen. Eine doppelt so lange Liste kann doppelt so viele Prüfungen brauchen, daher der Name „linear“: Die Arbeit wächst geradlinig mit der Größe.

function linearSearch(list, target) {
  for (let i = 0; i < list.length; i++) {
    if (list[i] === target) return i;  // gefunden
  }
  return -1;                             // alles geprüft
}

Binäre Suche: den Rest halbieren

Ist die Liste sortiert, geht es viel besser. Denk an das Zahlenratespiel: Jemand wählt eine Zahl von 1 bis 100 und antwortet nur „höher“ oder „tiefer“. Wer klug spielt, rät zuerst 50. Egal wie die Antwort lautet, die Hälfte der Möglichkeiten ist weg. Der nächste Tipp ist die Mitte dessen, was übrig ist, und so weiter. Genau das macht die binäre Suche mit einer sortierten Liste. Sie hält zwei Marken, lo und hi, um den Teil, in dem das Ziel noch sein kann. Sie prüft den mittleren Wert. Ist das das Ziel, ist sie fertig. Ist der mittlere Wert kleiner als das Ziel, ist auch alles links davon kleiner, also rückt lo hinter die Mitte. Ist er größer, rückt hi vor die Mitte. Wenn lo an hi vorbeizieht, bleibt nichts übrig, und das Ziel ist nicht in der Liste.

function binarySearch(list, target) {
  let lo = 0, hi = list.length - 1;
  while (lo <= hi) {
    const mid = Math.floor((lo + hi) / 2);
    if (list[mid] === target) return mid;
    if (list[mid] < target) lo = mid + 1;  // Ziel liegt rechts
    else hi = mid - 1;                     // Ziel liegt links
  }
  return -1;
}
Wird geladen

Zum Drehen ziehen. Zum Zoomen scrollen oder mit zwei Fingern ziehen.

Eine sortierte Liste mit 31 Zahlen. Wähl ein Ziel, geh dann Schritt für Schritt durch die binäre und die lineare Suche und vergleich die Zahl der Prüfungen.

Wie viele Prüfungen?

Jede Prüfung der binären Suche halbiert den übrigen Teil mindestens. Von n Werten bleiben nach einer Prüfung höchstens etwa n/2, nach zwei etwa n/4 und so weiter, bis ein Wert übrig ist. Wie oft man halbieren muss, um von n auf 1 zu kommen, ist der Logarithmus von n zur Basis 2, geschrieben log₂ n. Zählt man die letzte Prüfung mit, braucht die binäre Suche höchstens ⌊log₂ n⌋ + 1 Prüfungen, wobei ⌊ ⌋ Abrunden bedeutet. Bei 100 Werten sind das 7 Prüfungen, deshalb lässt sich das Ratespiel immer mit 7 Tipps gewinnen. Bei 1000 Werten sind es 10, bei einer Million 20 und bei einer Milliarde 30.

Listengröße nLineare Suche, schlechtester FallBinäre Suche, schlechtester Fall
773
1001007
1,0001,00010
1,000,0001,000,00020
1,000,000,0001,000,000,00030

Der Haken: Die Liste muss sortiert sein

Die binäre Suche funktioniert nur, weil in einer sortierten Liste ein einziger Vergleich verrät, auf welcher Seite das Ziel liegen muss. In einer unsortierten Liste sagt der mittlere Wert nichts über seine Nachbarn, und du bist wieder bei der linearen Suche. Sortieren kostet selbst Arbeit (darum geht es in den nächsten beiden Einheiten), also hängt die Wahl vom Einsatz ab. Durchsuchst du eine Liste einmal, ist die lineare Suche vielleicht am billigsten. Durchsuchst du dieselbe Liste tausendmal, lohnt es sich schnell, sie einmal zu sortieren und dann binär zu suchen. Dieser Tausch zwischen dem Vorbereiten von Daten und dem Beantworten von Fragen dazu zieht sich durch das ganze Fach.

Ein klassischer Ausrutscher bei der binären Suche ist der Aktualisierungsschritt. Schreibt man lo = mid statt lo = mid + 1, kann die Schleife bei zwei übrigen Werten endlos laufen, weil mid sich nie ändert. Der mittlere Wert ist schon geprüft, er kann also aus dem nächsten Bereich herausfallen.
lineare SucheWerte vom Anfang an einzeln prüfen
binäre SucheDie Mitte eines sortierten Bereichs prüfen und die Hälfte weglassen, in der das Ziel nicht sein kann
schlechtester FallDie Eingabe, bei der der Algorithmus die meiste Arbeit hat
log₂ nWie oft man n halbieren kann, bis man bei 1 ist
lo und hiDie beiden Enden des Bereichs, in dem das Ziel noch sein kann
-1Ein üblicher Rückgabewert für „nicht gefunden“
  1. Wie viele Prüfungen braucht die binäre Suche höchstens bei einer sortierten Liste mit 1000 Werten?
  2. Wie viele Prüfungen braucht die lineare Suche höchstens bei einer Liste mit 1000 Werten?
  3. Die binäre Suche braucht eine Liste, die
    • sortiert ist
    • kurz ist
    • aus ganzen Zahlen besteht
    • keine Werte doppelt enthält
  4. Wie viele Prüfungen braucht die binäre Suche in der Liste [2, 5, 8, 12, 16, 23, 38, 56, 72, 91], um 23 zu finden?
  5. Wie viele Prüfungen braucht die lineare Suche in derselben Liste, um 23 zu finden?
  6. Die binäre Suche prüft auf der Suche nach 25 den mittleren Wert 40. Was passiert als Nächstes?
    • hi rückt direkt vor die Mitte
    • lo rückt direkt hinter die Mitte
    • die Suche endet: 25 fehlt
    • sie prüft den nächsten Wert rechts
  7. Du darfst eine Zahl von 1 bis 100 raten und hörst „höher“ oder „tiefer“. Wie viele Tipps reichen mit der besten Strategie immer?
  8. Eine Liste wird doppelt so groß. Was passiert mit der Zahl der Prüfungen der binären Suche im schlechtesten Fall?
    • Sie verdoppelt sich
    • Sie wächst um etwa eins
    • Sie bleibt genau gleich
    • Sie wird quadriert
  9. Du suchst einmal einen einzigen Wert in einer unsortierten Liste. Was ist billiger?
    • Lineare Suche
    • Liste sortieren, dann binär suchen
  10. Warum kann lo = mid (statt mid + 1) die binäre Suche endlos laufen lassen?
    • Bei zwei übrigen Werten kann mid jede Runde gleich bleiben
    • mid wird negativ
    • JavaScript erlaubt es nicht
    • Die Liste wird länger
  11. Wie viele Prüfungen braucht die binäre Suche höchstens bei 1 000 000 Werten?
Das Wichtigste
  • Die lineare Suche prüft einen Wert nach dem anderen: bis zu n Prüfungen.
  • Die binäre Suche halbiert den übrigen Bereich: bis zu ⌊log₂ n⌋ + 1 Prüfungen.
  • Die binäre Suche funktioniert nur mit einer sortierten Liste.
  • Eine Million Werte: höchstens 20 Prüfungen.
  • Mit mid + 1 und mid − 1 aktualisieren, damit der Bereich immer schrumpft.
Quellen zu diesem Kurs (11)
  • MIT OpenCourseWare 6.006 Introduction to Algorithms, Spring 2020 (Demaine, Ku, Solomon)
  • lecture notes 1 Introduction, 3 Sorting, 9 Breadth-First Search, 10 Depth-First Search (ocw.mit.edu/courses/6-006-introduction-to-algorithms-spring-2020/pages/lecture-notes) and Fall 2011 lecture 13 BFS notes (ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011)
  • Cormen, Leiserson, Rivest, Stein, Introduction to Algorithms (MIT Press)
  • with the CLRS-based Khan Academy algorithms unit by Thomas Cormen and Devin Balkcom of Dartmouth (khanacademy.org/computing/computer-science/algorithms: binary search, selection sort analysis, merge sort, quicksort overview and analysis)
  • MacTutor History of Mathematics, Al-Khwarizmi (mathshistory.st-andrews.ac.uk/Biographies/Al-Khwarizmi: word algorithm from the Latin title Algoritmi de numero Indorum)
  • D. E. Joyce, Euclid's Elements Book VII Propositions 1 and 2 (mathcs.clarku.edu/~djoyce/elements/bookVII)
  • Wolfram MathWorld, Merge Sort (mathworld.wolfram.com/MergeSort.html: proposed by John von Neumann in 1945, after Knuth 1998 p. 159)
  • Stanford CS "Tony Hoare: Quicksort" (cs.stanford.edu/people/eroberts/courses/soco/projects/2008-09/tony-hoare/quicksort.html: devised while a student at Moscow State University for Russian-English machine translation with a tape dictionary, programmed in Algol 60 and published 1961; the year 1959 from the Wikipedia Quicksort article and its cited sources)
  • Bodleian Libraries, Ada Lovelace (blogs.bodleian.ox.ac.uk/adalovelace: 1843 paper, Note G Bernoulli numbers)
  • Fourmilab text of Menabrea's Sketch with Lovelace's notes (fourmilab.ch/babbage/sketch.html)
  • Seven Bridges of Konigsberg (Euler 1736) and Tower of Hanoi (Edouard Lucas, 1883) checked against the Wikipedia articles and their cited sources.

Abgerufen: 2026-10-17