Suchalgorithmus: Linear oder binär suchen
Du führst lineare und binäre Suchen aus, zählst Vergleiche und erkennst, welche Reihenfolge die binäre Suche braucht.
Kurz gesagt
Die lineare Suche prüft Einträge der Reihe nach. Die binäre Suche braucht passend sortierte Daten und verkleinert den Suchbereich durch Vergleiche mit der Mitte; ihr maximaler Vergleichsaufwand wächst langsamer.
Ein Suchalgorithmus ist eine genaue Anleitung zum Finden eines gesuchten Wertes. Eine Liste enthält Einträge in einer bestimmten Reihenfolge. Du lernst zwei Suchverfahren kennen und vergleichst ihre Schritte. Alle folgenden Listen sind ausgedachte Übungsdaten.
Deine Lernziele
Der Suchwert ist der Wert, den du finden möchtest. Die lineare Suche beginnt beim ersten Eintrag. Vergleiche ihn mit dem Suchwert. Bei Gleichheit meldest du die gefundene Stelle und stoppst. Sonst prüfst du den nächsten Eintrag. Ist die Liste zu Ende, meldest du „nicht gefunden“.
Für die binäre Suche verwenden wir aufsteigend sortierte Zahlen: Kleinere Werte stehen vor größeren; gleiche Werte dürfen nebeneinander vorkommen. Der Suchbereich ist der Teil der Liste, der noch infrage kommt. Anfangs ist das die ganze Liste. Prüfe den mittleren Eintrag. Gibt es zwei mittlere Einträge, nehmen wir in dieser Lektion den linken. Ist er gleich dem Suchwert, meldest du seine Stelle und stoppst. Ist der Suchwert kleiner, suchst du links von der geprüften Mitte weiter. Ist er größer, suchst du rechts davon weiter. Die geprüfte Mitte gehört nicht mehr zum neuen Suchbereich. Wiederhole diese Schritte, bis du den Wert findest oder der Suchbereich leer ist.
Ein leerer Suchbereich bedeutet „nicht gefunden“. Auch eine von Anfang an leere Liste liefert dieses Ergebnis, ohne einen Eintrag zu prüfen. Kommt der Suchwert mehrfach vor, findet die lineare Suche den ersten Treffer von links. Die binäre Suche kann eine andere passende Stelle liefern.
Lineare und binäre Suche
Linear bedeutet hier: Einträge der Reihe nach prüfen. Binär bedeutet hier: Die Mitte prüfen und bei einem fehlenden Treffer in einer der beiden verbleibenden Hälften weitersuchen.
Beispiel: Die Zahl 46 suchen
- 1Die sortierte Liste lautet: 5, 12, 19, 27, 34, 46.
- 2Linear prüfst du 5, 12, 19, 27, 34 und 46. Beim sechsten Vergleich findest du den Suchwert.
- 3Binär prüfst du zuerst 19, den linken der beiden mittleren Einträge. 46 ist größer; übrig bleiben 27, 34 und 46.
- 4Die neue Mitte ist 34. 46 ist größer; übrig bleibt 46.
- 5Du prüfst 46 und findest den Suchwert beim dritten Vergleich.
Teste dich
Wir zählen jeden Vergleich des Suchwerts mit einem Listeneintrag als einen Vergleichsschritt. Das Ergebnis kann „kleiner“, „gleich“ oder „größer“ sein. Wir zählen hier weder einzelne Prüfzeichen eines Programms noch andere Arbeitsschritte.
Bei der linearen Suche braucht ein Treffer am Anfang einen Vergleich. Steht der erste Treffer ganz am Ende oder fehlt der Suchwert, prüfst du jeden Eintrag. Das Maximum, also die größte mögliche Vergleichszahl, entspricht deshalb der Anzahl der Einträge.
Die binäre Suche braucht ebenfalls einen Vergleich, wenn der Suchwert gleich in der zuerst geprüften Mitte steht. Andernfalls fällt mit jedem Schritt ungefähr die Hälfte des bisherigen Suchbereichs weg. Die geprüfte Mitte fällt ebenfalls weg. Deshalb steigt bei einer nicht leeren Liste die maximale Vergleichszahl nur um einen, wenn du die Anzahl der Einträge verdoppelst. Die Tabelle zeigt diesen Unterschied. Bei längeren Listen wächst der Abstand zwischen den beiden Maximalzahlen. Eine einzelne lineare Suche kann trotzdem nach einem Vergleich fertig sein.
Die Vergleichszahlen beschreiben die Suche in einer bereits vorliegenden Liste. Vorheriges Sortieren ist nicht mitgezählt. Weniger Suchvergleiche garantieren auch keine im gleichen Verhältnis kürzere gemessene Suchzeit.
| Anzahl der Einträge | Linear: maximal | Binär: maximal |
|---|---|---|
| 8 | 8 Vergleiche | 4 Vergleiche |
| 16 | 16 Vergleiche | 5 Vergleiche |
| 32 | 32 Vergleiche | 6 Vergleiche |
Merke: Der wachsende Vorsprung betrifft die maximal nötigen Suchvergleiche. Er bedeutet nicht, dass jede einzelne binäre Suche weniger Vergleiche braucht als jede lineare Suche.
Teste dich
Die lineare Suche funktioniert in sortierten und in ungeordneten Listen. Sie prüft Einträge nacheinander und überspringt vor einem Treffer keinen Eintrag. Deshalb braucht sie keine vorherige Sortierung.
Die binäre Suche braucht für unser Verfahren eine aufsteigend sortierte Liste. Erst diese Ordnung erlaubt den Schluss: Ist der Suchwert kleiner als die Mitte, kann er nicht rechts davon stehen. Ist er größer, kann er nicht links davon stehen. In einer ungeordneten Liste könnten passende Werte in der ausgeschlossenen Hälfte liegen.
Ein Eintrag kann mehrere Angaben enthalten. In der Tabelle gehören zu jedem Heft eine Heftnummer und eine Seitenzahl. Die Heftnummern sind aufsteigend sortiert, die Seitenzahlen sind ungeordnet. Deshalb ist die Liste für eine binäre Suche nach Heftnummern vorbereitet. Für eine binäre Suche nach Seitenzahlen müsstest du die Einträge zuerst nach der Seitenzahl ordnen. Für die lineare Suche ist das nicht nötig.
Wähle also nach der gesuchten Angabe und ihrer Reihenfolge. Wenn du eine ungeordnete Liste erst sortierst, ist das zusätzlicher Aufwand vor der binären Suche. Dieser Aufwand gehört nicht zu unseren gezählten Suchvergleichen.
| Heftnummer | Seitenzahl |
|---|---|
| 12 | 64 |
| 18 | 32 |
| 27 | 48 |
| 35 | 16 |
Merke: Für die binäre Suche müssen die Einträge nach genau der Angabe sortiert sein, nach der du suchst. Unter den beiden behandelten Verfahren kommt die lineare Suche auch mit ungeordneten Einträgen zurecht.
Teste dich
Alles auf einen Blick
Suchalgorithmus
Prüfe die Einträge der Reihe nach und stoppe beim ersten Treffer.
Prüfe die Mitte und suche bei einem fehlenden Treffer in der passenden verbleibenden Hälfte weiter.
Bei zwei mittleren Einträgen nehmen wir den linken.
Bei langen Listen wächst das Maximum der binären Suche langsamer als das der linearen Suche.
Für die binäre Suche müssen die Einträge nach der gesuchten Angabe passend sortiert sein.
Vorheriges Sortieren ist in den Suchvergleichen nicht enthalten.
Die Buchnummer 68 mit beiden Verfahren finden
- 1Die ausgedachte, aufsteigend sortierte Liste lautet: 6, 14, 22, 31, 43, 57, 68, 79. Gesucht ist 68.
- 2Linear prüfst du zuerst 6, dann 14, 22, 31, 43 und 57. Das sind bisher sechs Vergleiche ohne Treffer.
- 3Als Nächstes prüfst du 68 und stoppst. Die lineare Suche braucht hier sieben Vergleiche.
- 4Binär beginnst du wieder mit der ganzen Liste. Die beiden mittleren Einträge sind 31 und 43; du prüfst den linken, also 31.
- 568 ist größer als 31. Im verbleibenden Bereich 43, 57, 68, 79 prüfst du als linke Mitte 57.
- 668 ist größer als 57. Im verbleibenden Bereich 68, 79 prüfst du als linke Mitte 68 und findest den Suchwert.
- 7Die binäre Suche braucht hier drei Vergleiche. Vorheriges Sortieren war nicht nötig, weil die Liste bereits passend sortiert war.
Fehler finden
Fehler in Zeile 2Die Aussage übersieht die ungeordnete Reihenfolge. Richtig: Die binäre Suche braucht hier eine Sortierung nach den Zahlenwerten. Die lineare Suche funktioniert ohne dieses Umordnen.
Lückentext
In einer aufsteigend sortierten Zahlenliste ist der Suchwert kleiner als die geprüfte Mitte. Die binäre Suche setzt sich in der Hälfte ohne die geprüfte Mitte fort. Die lineare Suche nach 25 prüft nacheinander 30, 11 und 25 und stoppt beim Treffer. Sie braucht Vergleiche. Eine Zahlenliste ist ungeordnet. Ohne Umordnen lässt sie sich nach den Regeln dieser Lektion durchsuchen.