MINT lernen

Suchverfahren vergleichen

Lohnt es sich, eine Reihung erst mühsam zu sortieren, nur um danach schneller suchen zu können?

1

Bester, ungünstigster, durchschnittlicher Fall

Wie aufwendig ein Suchverfahren ist, hängt davon ab, wo x steht. Deshalb vergleicht man drei Fälle, jeweils in Vergleichen für eine Reihung der Länge \(n\):

Falllineare Suchebinäre Suche
bester1 (x an Index 0)1 (x in der ersten Mitte)
ungünstigster\(n\) (x hinten oder fehlt)\(\lfloor\log_2 n\rfloor + 1\)
durchschnittlich*\(\frac{n+1}{2}\)knapp 1 weniger als im ungünstigsten Fall
  • * Durchschnitt:gemittelt über alle Positionen, wenn x vorkommt und jede Position gleich wahrscheinlich ist.
  • Maßstab:entscheidend ist meist der ungünstigste Fall — er gilt garantiert für jede Eingabe.
  • Voraussetzung:die lineare Suche arbeitet auf jeder Reihung, die binäre nur auf einer sortierten.
Herleitung:
\(\dfrac{1 + 2 + \ldots + n}{n}\)
Mittelwert

Steht x an Index \(i\), kostet das \(i + 1\) Vergleiche — also 1, 2, …, \(n\) für die \(n\) möglichen Positionen.

\(\dfrac{\frac{n(n+1)}{2}}{n}\)
Summe

Summe der Zahlen 1 bis \(n\) (kleiner Gauß): \(\frac{n(n+1)}{2}\).

\(\dfrac{n+1}{2}\)
kürzen

Durch \(n\) teilen. Beispiel \(n = 9\): im Mittel 5 Vergleiche — der Treffer liegt im Schnitt in der Mitte.

2

Wachstum und Entscheidung

Ungünstigster Fall für wachsende Datenmengen:

\(n\)linearbinär
10104
1001007
1 0001 00010
1 000 0001 000 00020
  • Linear:verdoppelt sich \(n\), verdoppeln sich die Vergleiche (+ n).
  • Logarithmisch:verdoppelt sich \(n\), kommt genau ein Vergleich hinzu.
  • Sortieren kostet:einfache Sortierverfahren brauchen etwa \(\frac{n(n-1)}{2}\approx\frac{n^2}{2}\) Vergleiche — so viel wie etwa \(\frac{n}{2}\) lineare Suchen im ungünstigsten Fall.

Stelle mit den Reglern die Datenmenge \(n\) und die Zahl \(k\) der Suchvorgänge ein. Oben siehst du eine einzelne Suche, unten den Gesamtaufwand für \(k\) Suchen — einmal nur linear, einmal erst sortieren und dann binär. Verdopple \(n\) mehrmals und finde heraus, ab welchem \(k\) sich das Sortieren lohnt.

Linear oder erst sortieren?

Halte fest: Eine einzelne Suche ist binär fast kostenlos, aber das Sortieren vorab kostet etwa \(\frac{n^2}{2}\) Vergleiche — es lohnt sich erst, wenn man ungefähr \(\frac{n}{2}\) Mal oder öfter sucht.

  • Einmal suchen, unsortiert:lineare Suche.
  • Schon sortiert:binäre Suche — ab wenigen Dutzend Elementen deutlich schneller.
  • Oft suchen, große Daten:einmal sortieren, dann binär; bei kleinen \(n\) ist der Unterschied unerheblich.
  • Speicher:beide Verfahren arbeiten in-place auf der Reihung und brauchen nur wenige Hilfsvariablen (i bzw. links, rechts, mitte) — unabhängig von \(n\).
Merke

Ungünstigster Fall: lineare Suche \(n\) Vergleiche · binäre Suche \(\lfloor\log_2 n\rfloor + 1\) Vergleiche

3

Allgemeine Hinweise

Durchschnitt nicht verwechseln

Die \(\frac{n+1}{2}\) Vergleiche gelten nur, wenn x vorkommt. Fehlt x, braucht die lineare Suche immer alle \(n\) Vergleiche.

Verdopplung als Test

Um ein Verfahren einzuschätzen, frage: Was passiert bei doppelter Datenmenge? Doppelt so viel (linear), ein Schritt mehr (logarithmisch) oder viermal so viel (quadratisch)?

Sortieren ist nicht gratis

Wer für eine einzige Suche erst sortiert, hat mehr Arbeit als mit der linearen Suche. Das lohnt sich nur, wenn danach oft gesucht wird und sich die Daten kaum ändern.

Videos