MINT lernen

Lineare Suche

Wie findet ein Programm eine Zahl in einer Reihung, über deren Reihenfolge es nichts weiß?

1

Von vorn nach hinten durchsehen

Nach einem Stadtlauf stehen die Startnummern in der Reihenfolge des Zieleinlaufs in der Reihung startnr. Auf welchem Platz ist die Nummer 15 ins Ziel gekommen?

  • Suchproblem:gegeben eine Reihung a und ein Suchwert x — gesucht ist der Index, an dem x steht.
  • Prinzip:die Elemente der Reihe nach ab Index 0 mit x vergleichen (auch sequenzielle Suche).
  • Treffer:sofort abbrechen und den Index zurückgeben — hier 3.
  • Kein Treffer:nach dem letzten Element −1 zurückgeben; −1 ist nie ein gültiger Index.
  • Doppelte Werte:geliefert wird das erste Vorkommen: die Suche nach 8 ergibt 1, nicht 4.
  • Voraussetzung:keine — die Reihung darf unsortiert sein.
static int lineareSuche(int[] a, int x) {
    for (int i = 0; i < a.length; i++) {
        if (a[i] == x) {
            return i;          // erster Treffer: Methode endet sofort
        }
    }
    return -1;                 // alle Elemente geprüft, x nicht dabei
}
2

Wie viele Vergleiche?

Den Aufwand misst man an der Zahl der Vergleiche a[i] == x. Für eine Reihung der Länge \(n\) gilt:

  • Bester Fall:x steht an Index 0 — 1 Vergleich.
  • Ungünstigster Fall:x steht ganz hinten oder fehlt — \(n\) Vergleiche.
  • Treffer an Index i:genau i + 1 Vergleiche.
  • Beispiel:in startnr braucht die Suche nach 15 vier, nach 8 zwei und nach 50 sechs Vergleiche (Ergebnis −1).

Tippe zuerst: Klicke den Index an, den die Suche liefern wird (oder das Feld −1), und stelle die Zahl der Vergleiche ein. Starte dann die Suche und vergleiche. Spiele alle Runden durch — auch die mit doppelten und fehlenden Werten.

Erst tippen, dann suchen

Tipp Ergebnis?
Tipp Vergleiche
?

Halte fest: Die lineare Suche liefert den Index des ersten Treffers nach Index + 1 Vergleichen; fehlt der Wert, prüft sie alle \(n\) Elemente und liefert −1.

Merke

Lineare Suche: mindestens 1, höchstens \(n\) Vergleiche · Rückgabe: Index des ersten Treffers oder −1

3

Allgemeine Hinweise

−1 erst nach der Schleife

Ein else { return -1; } in der Schleife beendet die Suche schon nach dem ersten Element. Erst wenn alle Elemente geprüft sind, steht fest, dass x fehlt.

Ergebnis vor dem Zugriff prüfen

Mit int p = lineareSuche(a, x); und if (p != -1) vermeidest du a[-1] — das würde mit ArrayIndexOutOfBoundsException abbrechen.

Texte mit equals vergleichen

Bei einer String-Reihung heißt die Bedingung a[i].equals(x). Das == prüft nur, ob es dasselbe Objekt ist, nicht ob der Text gleich ist.

Videos