MINT lernen

Abituraufgaben: Verfahren beurteilen

Eine Messreihe mit drei unbekannten Verfahren und zwei Summen, von denen nur eine die 100 000 schafft.

Dein Fortschritt:
0 / 0 Aufgaben
1

Die Messreihe

14 BEAFB I–II

Im Informatikkurs wurden drei Sortierverfahren mit einem Zähler für Vergleiche ausgestattet. Verfahren A erhielt zufällige Daten, Verfahren B ebenfalls zufällige Daten, Verfahren C bereits aufsteigend sortierte Daten. Die Namen der Verfahren wurden in der Tabelle weggelassen; es handelt sich um Selectionsort, Insertionsort und Mergesort.

Gezählte Vergleiche der drei Verfahren
nVerfahren AVerfahren BVerfahren C
1 000499 5008 732999
2 0001 999 00019 4431 999
4 0007 998 00042 8503 999
  1. Ermitteln Sie für jedes Verfahren, um welchen Faktor die Zahl der Vergleiche bei Verdopplung von \(n\) wächst. (3 BE)
  2. Ordnen Sie den Verfahren A, B und C die Namen Selectionsort, Insertionsort und Mergesort zu und begründen Sie jede Zuordnung. (4 BE)
  3. Schätzen Sie für alle drei Verfahren die Zahl der Vergleiche bei \(n = 1\,000\,000\) ab und geben Sie die Rechenzeit bei \(10^9\) Vergleichen pro Sekunde an. (4 BE)
  4. Nennen Sie zwei weitere Kriterien außer der Zahl der Vergleiche, nach denen die Verfahren beurteilt werden sollten, und ordnen Sie Mergesort danach ein. (3 BE)

Hinweise

Hinweis zu Aufgabe a)
Teilen Sie jeweils den Wert bei \(2n\) durch den Wert bei \(n\).
Hinweis zu Aufgabe b)
Faktor 4 spricht für \(n^2\), Faktor 2 für \(n\), etwas mehr als 2 für \(n\log_2 n\). Beachten Sie auch, welche Daten C bekam.
Hinweis zu Aufgabe c)
Verwenden Sie die Formeln \(\frac{n(n-1)}{2}\), \(n\log_2 n\) und \(n - 1\).
Hinweis zu Aufgabe d)
Denken Sie an Speicher, Aufrufstapel und gleiche Schlüssel.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

A: \(1\,999\,000 : 499\,500 \approx 4{,}00\) und \(7\,998\,000 : 1\,999\,000 \approx 4{,}00\). B: \(19\,443 : 8\,732 \approx 2{,}23\) und \(42\,850 : 19\,443 \approx 2{,}20\). C: \(1\,999 : 999 \approx 2{,}00\) und \(3\,999 : 1\,999 \approx 2{,}00\).

Erwartungshorizont zu Aufgabe b)

A = Selectionsort: Faktor 4 bedeutet quadratisches Wachstum; die Werte sind exakt \(\frac{n(n-1)}{2}\), unabhängig von den Daten. B = Mergesort: Faktor etwas über 2 passt zu \(n\log_2 n\); die Werte liegen knapp unter \(n\log_2 n\) (z. B. \(1000\cdot\log_2 1000\approx9966\)). C = Insertionsort: genau \(n - 1\) Vergleiche — der beste Fall bei sortierter Eingabe, lineares Wachstum.

Erwartungshorizont zu Aufgabe c)

Selectionsort: \(\frac{10^6\cdot(10^6-1)}{2}\approx5\cdot10^{11}\) Vergleiche, rund 500 s. Mergesort: \(10^6\cdot\log_2 10^6\approx2\cdot10^7\) (die Messwerte liegen etwas darunter, etwa \(1{,}9\cdot10^7\)), rund 0,02 s. Insertionsort bei sortierter Eingabe: \(10^6 - 1\approx10^6\), rund 0,001 s.

Erwartungshorizont zu Aufgabe d)

Zum Beispiel Zusatzspeicher (Mergesort braucht eine Hilfsreihung der Länge \(n\)), Rekursionstiefe (Mergesort nur etwa \(\log_2 n + 1\)), Stabilität (Mergesort ist stabil) oder das Verhalten im ungünstigsten Fall (Mergesort garantiert \(n\log_2 n\)). Zwei Kriterien mit Einordnung genügen.

2

Zwei Wege zur Summe

16 BEAFB II–III

Zwei Schüler haben die Summe aller Elemente einer Reihung rekursiv berechnet: summeLinear(a, 0) verkleinert das Problem um ein Element, summeTH(a, 0, a.length - 1) halbiert es. Beide liefern für {5, 3, 8, 1, 9, 2, 7, 4} das Ergebnis 39. Für eine Reihung mit 100 000 Elementen bricht einer der Aufrufe mit StackOverflowError ab.

Zwei rekursive Summen
static int summeLinear(int[] a, int i) {
    if (i == a.length - 1) {
        return a[i];
    }
    return a[i] + summeLinear(a, i + 1);
}

static int summeTH(int[] a, int links, int rechts) {
    if (links == rechts) {
        return a[links];
    }
    int mitte = (links + rechts) / 2;
    return summeTH(a, links, mitte) + summeTH(a, mitte + 1, rechts);
}
  1. Vergleichen Sie beide Methoden für eine Reihung mit 8 Elementen hinsichtlich der Anzahl der Aufrufe, der Anzahl der Additionen und der Rekursionstiefe. (4 BE)
  2. Erklären Sie, welche der beiden Methoden bei 100 000 Elementen abbricht und warum die andere nicht abbricht. (4 BE)
  3. Leiten Sie für summeTH die Rekursionstiefe für \(n = 2^k\) Elemente her und geben Sie sie für \(n = 100\,000\) an. (4 BE)
  4. Nehmen Sie Stellung zu der Aussage: „Rekursion ist immer schlechter als eine Schleife.“ (4 BE)

Hinweise

Hinweis zu Aufgabe a)
Zeichnen Sie für beide Methoden den Aufrufbaum bzw. die Aufrufkette.
Hinweis zu Aufgabe b)
Welche Methode hat eine Rekursionstiefe, die mit \(n\) wächst?
Hinweis zu Aufgabe c)
Auf jeder Ebene halbieren sich die Bereiche. Zählen Sie die Ebenen bis zur Bereichsgröße 1.
Hinweis zu Aufgabe d)
Unterscheiden Sie Laufzeit, Speicher und Verständlichkeit — und nennen Sie ein Verfahren, bei dem Rekursion einen echten Vorteil bringt.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)
summeLinearsummeTH
Aufrufe815 (8 Basisfälle + 7 teilende)
Additionen77
Rekursionstiefe84

Beide rechnen gleich viel (7 Additionen). summeTH braucht fast doppelt so viele Aufrufe, hat aber eine viel kleinere Tiefe.

Erwartungshorizont zu Aufgabe b)

summeLinear bricht ab: Der Aufruf für Index i kann erst enden, wenn summeLinear(a, i + 1) fertig ist — alle 100 000 Aufrufe sind gleichzeitig offen und belegen je einen Eintrag auf dem begrenzten Aufrufstapel. summeTH hat nur etwa 18 gleichzeitig offene Aufrufe; die übrigen der rund 200 000 Aufrufe sind zu diesem Zeitpunkt schon beendet oder noch nicht begonnen.

Erwartungshorizont zu Aufgabe c)

Auf Ebene \(d\) haben die Bereiche \(\frac{n}{2^d}\) Elemente. Der Basisfall ist erreicht, wenn \(\frac{n}{2^d} = 1\), also \(d = \log_2 n = k\). Mit dem ersten Aufruf (Ebene 0) sind höchstens \(k + 1 = \log_2 n + 1\) Aufrufe gleichzeitig offen. Für \(n = 100\,000\): \(\lceil\log_2 100\,000\rceil + 1 = 17 + 1 = 18\).

Erwartungshorizont zu Aufgabe d)

Die Aussage ist zu pauschal. Dafür: Jeder Aufruf kostet Zeit und Stapelspeicher; lineare Rekursion wie summeLinear hat Tiefe \(n\) und kann abstürzen, eine Schleife braucht nur konstanten Speicher. Rekursion mit überlappenden Teilproblemen kann sogar Arbeit vervielfachen. Dagegen: Nach Teile und herrsche entstehen Verfahren wie Mergesort und Quicksort mit \(n\log_2 n\) statt \(n^2\) Vergleichen und nur logarithmischer Tiefe; rekursive Lösungen sind außerdem oft kürzer und leichter zu verstehen (z. B. Traversierung von Bäumen). Fazit: Rekursion ist dann schlechter, wenn sie das Problem nur um ein Element verkleinert; halbiert sie es, ist sie gleichwertig oder überlegen.