Direkt zum Inhalt

BPE 7 · J2

Lineare Suche: Schritt für Schritt prüfen

Du prüfst eine Folge von vorn und findest einen ersten Treffer, alle Treffer oder die sichere Aussage „nicht vorhanden“.

Bildungsplanbezug: BPE 7.2 · interne Lerneinheit 7.2.3

Geschätzte Lernzeit: 45 Minuten

Noch nicht begonnen

Das kannst du danach

  • Eine Suche ohne Sortiervoraussetzung ausführen
  • Ersten Treffer und alle Treffer unterscheiden
  • Den Misserfolgsfall korrekt behandeln
  • Die Anzahl geprüfter Elemente bestimmen

Verständlich erklärt

Die lineare Suche betrachtet die Indizes 0, 1, 2 und so weiter. Für den ersten Treffer genügt pro Element die Gleichheitsprüfung a[i] == ziel. Bei Erfolg wird i sofort zurückgegeben, bei vollständig erfolgloser Suche −1. −1 ist hier ein vereinbarter Sentinelwert für „nicht gefunden“ und darf nicht ungeprüft als Python-Listenindex verwendet werden: Python würde damit sonst das letzte Element ansprechen. Eine leere Eingabe liefert unmittelbar −1 und benötigt keine Elementprüfung.

Der erste Treffer kann an beliebiger Position liegen; die Folge muss nicht sortiert sein. Bei mehrfach vorkommendem Ziel liefert die Suche von links den kleinsten Trefferindex. Für alle Treffer sammelst du dagegen sämtliche passenden Indizes und läufst bis zum Ende.

Wir zählen genau eine Elementprüfung pro besuchter Position, nicht Schleifenbedingungen. Ein Treffer am ersten Element benötigt eine Prüfung; ein nicht vorhandenes Ziel in n Elementen benötigt n Prüfungen. return −1 gehört nach die Schleife, sonst würde schon ein einzelnes unpassendes erstes Element die ganze Suche beenden.

  • lineare Suche
  • Suchschlüssel
  • Trefferindex
  • Abbruch
  • Sentinelwert
  • Elementprüfung

Beispiel

werte = [9, 3, 7, 3], ziel = 3
Index 0: 9 == 3? Nein.
Index 1: 3 == 3? Ja.
Erster Treffer: 1; geprüfte Elemente: 2.
Alle Treffer: [1, 3] (dafür die ganze Liste prüfen).
Suche nach 8: Ergebnis -1 nach 4 Prüfungen.

Typische Fehler

  • Den gefundenen Wert statt seines Index zurückgeben
  • Beim ersten Misserfolg sofort −1 zurückgeben
  • Für alle Treffer beim ersten Treffer abbrechen
  • −1 ungeprüft als gültigen Array-Index weiterverwenden

Kurz zusammengefasst

Lineare Suche funktioniert auch unsortiert. Lege vorher fest, ob der erste oder jeder Treffer gewünscht ist und welcher Rückgabewert Misserfolg bedeutet.

Abi-Bezug

Protokolliere besuchte Indizes und den Abbruchgrund. Vergleiche beste und schlechteste Fälle anhand der tatsächlichen Elementprüfungen.

Jetzt selbst ausprobieren

Prüfe deine Lösung automatisch. Bei Bedarf helfen dir ein Tipp und anschließend die Musterlösung.

BPE 7J21 Punkteleicht

Beim ersten Treffer abbrechen

Noch nicht begonnen

Aufgabenstellung

Die lineare Suche nach 4 betrachtet [4, 7, 4, 9] von links und beendet sich beim ersten Treffer. Wie viele Elemente werden geprüft? Antworte nur mit einer ganzen Zahl; ein besuchter Index zählt als eine Prüfung.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Die Frage verlangt die Anzahl geprüfter Elemente, nicht den Trefferindex.
  2. Ein sofortiger Treffer an Index 0 braucht trotzdem eine Prüfung.
Lösung anzeigen
Schon an Index 0 stimmt der Wert 4 mit dem Ziel überein. Es erfolgt genau eine Elementprüfung; der zweite Treffer an Index 2 wird nicht mehr besucht.
BPE 7J21 Punkteleicht

Erst nach dem ganzen Durchlauf nicht gefunden

Noch nicht begonnen

Aufgabenstellung

Die lineare Suche nach 5 durchläuft [6, 2, 8] von links. Sie liefert bei Treffer dessen Index, sonst -1. Welche Zahl wird zurückgegeben? Antworte nur mit dieser Zahl.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Unterscheide die Anzahl der Prüfungen vom vereinbarten Rückgabewert für Misserfolg.
  2. Keine der drei Positionen enthält 5; der Sentinelwert ist −1.
Lösung anzeigen
6, 2 und 8 sind jeweils ungleich 5. Erst nach den drei erfolglosen Elementprüfungen steht das Ergebnis −1 fest.
BPE 7J22 Punktemittel

Den ersten Treffer linear suchen

Noch nicht begonnen

Aufgabenstellung

linear(a, ziel) liefert den kleinsten Index mit a[i] == ziel, sonst -1. Die Liste darf unsortiert sein und Wiederholungen enthalten. Suche von links; verändere die Eingabe nicht.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Durchlaufe die Indizes in aufsteigender Reihenfolge, damit der erste Treffer eindeutig ist.
  2. return -1 steht nach der Schleife; innerhalb der Schleife darf nur ein tatsächlicher Treffer beenden.
Lösung anzeigen
def linear(a, ziel):
    for i in range(len(a)):
        if a[i] == ziel:
            return i
    return -1
BPE 7J22 Punktemittel

Alle Trefferpositionen sammeln

Noch nicht begonnen

Aufgabenstellung

alle_treffer(a, ziel) liefert eine neue Liste aller passenden Indizes in aufsteigender Reihenfolge. Gibt es keinen Treffer, liefere []. Gib nicht die gefundenen Werte zurück und ändere a nicht.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Ein Treffer beendet diese Variante nicht; es könnten später weitere folgen.
  2. Hänge den aktuellen Index i an, nicht a[i].
Lösung anzeigen
def alle_treffer(a, ziel):
    positionen = []
    for i in range(len(a)):
        if a[i] == ziel:
            positionen.append(i)
    return positionen
BPE 7J22 Punktemittel

Geprüfte Elemente mitzählen

Noch nicht begonnen

Aufgabenstellung

linear_vergleiche(a, ziel) liefert die Anzahl besuchter Positionen bei linearer Suche von links bis einschließlich des ersten Treffers. Ohne Treffer wird die ganze Liste geprüft; für [] ist die Anzahl 0. Zähle keine Schleifenbedingungen. Die Eingabe bleibt unverändert.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Erhöhe den Zähler vor der Trefferentscheidung, damit das gefundene Element mitgezählt wird.
  2. Bei Misserfolg wird die erreichte Anzahl zurückgegeben, hier also nicht der Index-Sentinel −1.
Lösung anzeigen
def linear_vergleiche(a, ziel):
    anzahl = 0
    for wert in a:
        anzahl += 1
        if wert == ziel:
            return anzahl
    return anzahl
BPE 7J22 Punktemittel

Wann passt lineare Suche?

Noch nicht begonnen

Aufgabenstellung

Du sollst den ersten Treffer in einer noch unsortierten Liste finden. Welche Aussagen über lineare Suche von links sind richtig? Wähle alle richtigen Antworten.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Ohne Ordnung lassen sich aus einem unpassenden Wert keine ganzen Bereiche ausschließen.
  2. Die Reihenfolge der besuchten Indizes entscheidet, welcher Treffer zuerst erreicht wird.
Lösung anzeigen
Lineare Suche benötigt nur den Gleichheitsvergleich und keine Sortierung. Der Durchlauf von links mit frühem Trefferabbruch liefert die erste passende Position.
BPE 7J23 Punkteanspruchsvoll

Ein zu frühes return reparieren

Noch nicht begonnen

Aufgabenstellung

Eine for-Schleife prüft die Indizes von a. Bei einem Treffer gibt sie sofort i zurück. Direkt nach diesem if, aber noch innerhalb der for-Schleife, steht return -1. Damit endet schon die erste erfolglose Prüfung die Funktion. Welche Änderung behebt den Fehler und behandelt auch eine leere Liste korrekt?

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. return beendet die ganze Funktion, nicht bloß den aktuellen Schleifendurchlauf.
  2. Der Misserfolg steht erst fest, wenn alle erlaubten Positionen erfolglos geprüft wurden.
Lösung anzeigen
Ein unpassendes erstes Element ist noch kein Gesamtmisserfolg. Das abschließende return -1 muss erst nach dem gesamten erfolglosen Durchlauf erfolgen und wird dann auch bei leerer Liste erreicht.
BPE 7J23 Punkteanspruchsvoll

Nicht vorhandenes Ziel in 17 Elementen

Noch nicht begonnen

Aufgabenstellung

Eine lineare Suche von links untersucht eine Liste mit 17 Elementen. Das Ziel kommt nicht vor. Wie viele Elementprüfungen a[i] == ziel werden ausgeführt? Antworte nur mit einer ganzen Zahl; Schleifenbedingungen zählen nicht.

Ausgabe bzw. Vorschau

Noch nicht ausgeführt.
2 Tipps anzeigen
  1. Bei einer unsortierten Liste kann auch der letzte noch ungeprüfte Wert der gesuchte sein.
  2. Die Anzahl der Elementprüfungen entspricht hier genau der Listenlänge.
Lösung anzeigen
Ohne Treffer gibt es keinen frühen Abbruch. Jede der 17 Positionen muss einmal geprüft werden.

Lektionsabschluss

Bearbeite Aufgaben, um deine Auswertung zu sehen.