MINT lernen

Abituraufgaben: Binäre Suche

Zwei Aufgaben im Abiturformat — vom Postleitzahlen-Verzeichnis bis zur Suche nach dem ersten Blitzeinschlag.

Dein Fortschritt:
0 / 0 Aufgaben
1

Postleitzahlen-Verzeichnis

AFB I–II

Ein Versandhändler speichert die Postleitzahlen der Städte, in die er am selben Tag liefert, aufsteigend sortiert in der Reihung plz. Bei jeder Bestellung wird mit der binären Suche geprüft, ob die Postleitzahl x der Lieferadresse enthalten ist. Die Mitte wird mit mitte ← (links + rechts) / 2 (ganzzahlige Division) bestimmt.

Reihung plz (Länge 12)
  1. Beschreiben Sie das Prinzip der binären Suche und begründen Sie, warum sie hier anwendbar ist.
  2. Stellen Sie die Suche nach x = 60311 und nach x = 26000 jeweils in einer Tracetabelle mit den Spalten links, rechts, mitte, plz[mitte] dar. Geben Sie Rückgabewert und Zahl der Vergleiche an.
  3. Ermitteln Sie die höchstens nötige Zahl der Vergleiche für diese Reihung und für ein vollständiges Verzeichnis mit etwa 8 200 Postleitzahlen. Vergleichen Sie jeweils mit der linearen Suche.
  4. Implementieren Sie die binäre Suche als Java-Methode static int binaereSuche(int[] a, int x).

Hinweise

Hinweis zu Aufgabe a)
Voraussetzung der binären Suche nennen und am Beispiel prüfen.
Hinweis zu Aufgabe b)
Die Tabelle endet bei einem Treffer oder sobald links > rechts gilt.
Hinweis zu Aufgabe c)
Formel \(\lfloor\log_2 n\rfloor + 1\); die größte Zweierpotenz unter 8 200 ist \(2^{13} = 8192\).Ermitteln: Ergebnis finden und formulieren.
Hinweis zu Aufgabe d)
Zwei Grenzen, eine Schleife mit der Bedingung links <= rechts, drei Fälle.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

Man vergleicht x mit dem mittleren Element des Suchbereichs. Bei Gleichheit ist die Suche beendet; ist das mittlere Element kleiner, sucht man nur noch rechts davon weiter, sonst nur links. So halbiert jeder Vergleich den Suchbereich, bis x gefunden oder der Bereich leer ist (Rückgabe −1). Anwendbar, weil plz aufsteigend sortiert ist: Links der Mitte stehen nur kleinere, rechts nur größere Werte.

Erwartungshorizont zu Aufgabe b)
linksrechtsmitteplz[mitte]
011534117
611850667
9111070173
99960311

Rückgabe 9 nach 4 Vergleichen.

linksrechtsmitteplz[mitte]
011534117
04224103
34328195
32——

Nach dem dritten Vergleich gilt links = 3 > rechts = 2: Rückgabe −1 nach 3 Vergleichen.

Erwartungshorizont zu Aufgabe c)

\(n = 12\): \(\lfloor\log_2 12\rfloor + 1 = 3 + 1 = 4\) Vergleiche (lineare Suche: bis zu 12). \(n = 8\,200\): Wegen \(2^{13} = 8\,192 \le 8\,200 < 2^{14}\) ist \(\lfloor\log_2 8\,200\rfloor = 13\), also höchstens 14 Vergleiche — die lineare Suche braucht im ungünstigsten Fall 8 200.

Erwartungshorizont zu Aufgabe d)
static int binaereSuche(int[] a, int x) {
    int links = 0;
    int rechts = a.length - 1;
    while (links <= rechts) {
        int mitte = (links + rechts) / 2;
        if (a[mitte] == x) {
            return mitte;
        } else if (a[mitte] < x) {
            links = mitte + 1;
        } else {
            rechts = mitte - 1;
        }
    }
    return -1;
}
2

Blitzortung

AFB II–III

Ein Blitzortungssystem speichert für ein Gewitter die Zeitpunkte der Einschläge in Sekunden nach Beginn der Messung, aufsteigend sortiert. Mehrere Einschläge können auf dieselbe Sekunde fallen. Für die Auswertung wird der Index des ersten Einschlags zum Zeitpunkt t oder später gebraucht. Dazu dient der abgebildete Algorithmus.

Beispiel: zeit = {3, 8, 15, 21, 21, 21, 30, 42, 50}.

Algorithmus ersterAb
  1. Analysieren Sie den Algorithmus für das Beispiel und t = 21 mit einer Tracetabelle. Geben Sie den Rückgabewert, die Zahl der Vergleiche zeit[mitte] ≥ t und die Bedeutung des Ergebnisses an.
  2. Erläutern Sie, warum der Algorithmus nach einem Treffer nicht abbricht, sondern links weitersucht, und welche Rolle die Variable ergebnis spielt.
  3. Vergleichen Sie ersterAb(zeit, 21) mit dem Aufruf binaereSuche(zeit, 21) der üblichen binären Suche hinsichtlich Ergebnis und Zahl der Vergleiche.
  4. Eine Mitschülerin meint: „Weil ersterAb immer weiterläuft, bis der Bereich leer ist, ist es nicht schneller als eine lineare Suche.“ Beurteilen Sie diese Aussage.

Hinweise

Hinweis zu Aufgabe a)
In jeder Zeile: links, rechts, mitte, zeit[mitte], Vergleichsergebnis, ergebnis.
Hinweis zu Aufgabe b)
Kann links von einem Treffer noch ein Wert stehen, der ebenfalls ≥ t ist?
Hinweis zu Aufgabe c)
Die übliche binäre Suche bricht beim ersten Treffer an einer Mitte ab.
Hinweis zu Aufgabe d)
Um wie viel schrumpft der Suchbereich in jedem Durchlauf von ersterAb?

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)
linksrechtsmittezeit[mitte]≥ 21ergebnis
08421wahr4
0318falsch4
23215falsch4
33321wahr3
32———3

Rückgabe 3 nach 4 Vergleichen. Bedeutung: Index 3 ist der erste Einschlag zum Zeitpunkt 21 oder später — genauer: der kleinste Index mit zeit[i] ≥ t; gibt es keinen, liefert der Algorithmus −1.

Erwartungshorizont zu Aufgabe b)

Ein Treffer an der Mitte zeigt nur, dass hier ein Wert ≥ t steht. Weil gleiche Zeitpunkte vorkommen können, kann weiter links ein noch früherer passender Einschlag stehen. ergebnis merkt sich den bisher kleinsten passenden Index; die Suche geht in der linken Hälfte weiter (rechts ← mitte − 1). Findet sie dort nichts mehr, bleibt der gemerkte Index richtig. Ist zeit[mitte] < t, kann links davon nichts Passendes stehen — links ← mitte + 1.

Erwartungshorizont zu Aufgabe c)

binaereSuche(zeit, 21) trifft sofort an der ersten Mitte (Index 4) und liefert 4 nach 1 Vergleich — ein korrekter Index eines Werts 21, aber nicht der erste. ersterAb liefert 3 nach 4 Vergleichen. Die übliche Suche ist hier schneller, beantwortet aber eine andere Frage (irgendein Vorkommen statt erstes). Außerdem liefert sie −1, wenn t selbst nicht vorkommt (z. B. t = 25), während ersterAb dann den nächstspäteren Einschlag findet (Index 6).

Erwartungshorizont zu Aufgabe d)

Die Aussage ist falsch. ersterAb läuft zwar immer bis links > rechts, halbiert den Bereich aber in jedem Durchlauf, weil mitte stets ausgeschlossen wird. Damit sind es höchstens \(\lfloor\log_2 n\rfloor + 1\) Vergleiche (hier 4 bei \(n = 9\)), bei einer Million Einschlägen höchstens 20 statt bis zu einer Million bei der linearen Suche. Richtig ist nur: Der beste Fall mit einem Vergleich entfällt; die Zahl der Vergleiche ist fast immer die maximale.