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
Die Frage verlangt die Anzahl geprüfter Elemente, nicht den Trefferindex.
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
Unterscheide die Anzahl der Prüfungen vom vereinbarten Rückgabewert für Misserfolg.
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
Durchlaufe die Indizes in aufsteigender Reihenfolge, damit der erste Treffer eindeutig ist.
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
Ein Treffer beendet diese Variante nicht; es könnten später weitere folgen.
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
Erhöhe den Zähler vor der Trefferentscheidung, damit das gefundene Element mitgezählt wird.
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
Ohne Ordnung lassen sich aus einem unpassenden Wert keine ganzen Bereiche ausschließen.
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
return beendet die ganze Funktion, nicht bloß den aktuellen Schleifendurchlauf.
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
Bei einer unsortierten Liste kann auch der letzte noch ungeprüfte Wert der gesuchte sein.
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.