MINT lernen

Abituraufgaben: Sortierverfahren vergleichen

Zwei Aufgaben auf Abiturniveau: Messwerte auswerten, Stabilität nachweisen und ein Verfahren begründet auswählen.

Dein Fortschritt:
0 / 0 Aufgaben
1

Wer ist A, B und C?

AFB I–II

Eine Informatik-AG hat Selectionsort, Insertionsort und Bubblesort mit Abbruch (Flag getauscht) implementiert und mit Zählvariablen versehen. Gezählt werden die Vergleiche V zweier Elemente und die Umstellungen U (Vertauschungen bzw. Verschiebungen; bei Selectionsort wird nur getauscht, wenn das Minimum nicht schon vorn steht). Die Reihungen haben jeweils n = 1000 Elemente. Leider wurden die Namen der Verfahren in der Messtabelle durch A, B und C ersetzt.

Messtabelle für n = 1000
Verfahrenvorsortiertzufälligumgekehrt
VUVUVU
A9990498 324241 475499 500499 500
B499 5000499 500995499 500500
C9990242 469241 475499 500499 500
  1. Beschreiben Sie neben der Anzahl der Vergleiche drei weitere Kriterien, nach denen Sortierverfahren verglichen werden.
  2. Ordnen Sie den Buchstaben A, B und C begründet die drei Verfahren zu.
  3. Berechnen Sie, wie viele Vergleiche Verfahren B bei n = 2000 benötigt, und begründen Sie, warum sich die Anzahl bei Verdopplung von n etwa vervierfacht.
  4. Erklären Sie, warum Verfahren B bei umgekehrt sortierter Eingabe nur 500 Umstellungen benötigt.

Hinweise

Hinweis zu Aufgabe a)
Denken Sie an Speicher, an Schreibzugriffe, an gleiche Werte und an die Eingabe.
Hinweis zu Aufgabe b)
Welches Verfahren vergleicht immer gleich oft? Die beiden übrigen unterscheiden sich nur in der Spalte „zufällig“.
Hinweis zu Aufgabe c)
\(V(n)=\frac{n(n-1)}{2}\); ausmultiplizieren und den Term mit \(n^2\) betrachten.
Hinweis zu Aufgabe d)
Verfolgen Sie die ersten Runden von Selectionsort bei 1000, 999, …, 1: Welche zwei Elemente werden getauscht?

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

Umstellungen/Schreibzugriffe: wie oft Elemente vertauscht oder verschoben werden (ein Tausch schreibt zwei Plätze, eine Verschiebung einen). Speicherbedarf: ob zusätzlich zur Reihung Speicher nötig ist — alle drei arbeiten in-place mit einer Hilfsvariable. Stabilität: ob Elemente mit gleichem Wert ihre ursprüngliche Reihenfolge behalten. (Auch möglich: Verhalten bei vorsortierten Daten.)

Erwartungshorizont zu Aufgabe b)

B = Selectionsort: V ist bei jeder Eingabe \(\frac{1000\cdot999}{2}=499\,500\), und U bleibt immer unter \(n-1=999\). A und C brauchen vorsortiert nur \(n-1=999\) Vergleiche und haben stets gleich viele Umstellungen (jede behebt genau ein falsch geordnetes Paar). Bei zufälliger Eingabe vergleicht C nur etwa halb so oft wie A: Insertionsort bricht die Suche nach der Einfügestelle ab, sobald sie gefunden ist, während Bubblesort ganze Durchläufe ausführt. Also C = Insertionsort, A = Bubblesort mit Abbruch.

Erwartungshorizont zu Aufgabe c)

\(V(2000)=\frac{2000\cdot1999}{2}=1\,999\,000\). Allgemein \(V(n)=\frac{n^2}{2}-\frac{n}{2}\); für große n bestimmt der quadratische Term den Wert. Mit \(2n\) statt \(n\) wird daraus \(\frac{(2n)^2}{2}=4\cdot\frac{n^2}{2}\), also etwa das Vierfache (hier \(1\,999\,000:499\,500\approx4{,}002\)).

Erwartungshorizont zu Aufgabe d)

In Runde 1 ist das Minimum 1 ganz hinten; es wird mit der 1000 getauscht — damit stehen zwei Elemente richtig. Runde 2 tauscht 2 und 999 usw. Nach 500 Runden steht die Reihung sortiert; in den restlichen 499 Runden steht das Minimum schon vorn, es wird nicht getauscht. Also 500 Umstellungen.

2

Ergebnisliste beim Crosslauf

AFB II–III

Bei einem Schul-Crosslauf erfasst eine App die Teilnehmenden in zwei gleich langen Reihungen: namen (Text) und zeiten (Laufzeit in Minuten, ganzzahlig gerundet). Zu Index i gehören namen[i] und zeiten[i]. Die Liste ist zunächst alphabetisch nach Namen geordnet. Für die Ergebnisliste soll nach der Zeit sortiert werden; bei gleicher Zeit soll die alphabetische Reihenfolge erhalten bleiben.

Ausschnitt: vier Teilnehmende, alphabetisch geordnet
Index0123
namenAdaBenCemDora
zeiten41384136
  1. Erläutern Sie am Beispiel, warum für die Ergebnisliste ein stabiles Sortierverfahren nötig ist.
  2. Zeigen Sie, indem Sie Selectionsort auf den Ausschnitt anwenden (beide Reihungen werden gemeinsam umgestellt), dass Selectionsort nicht stabil ist.
  3. Entwerfen Sie ein Struktogramm eines stabilen Verfahrens, das zeiten aufsteigend sortiert und namen dabei passend mitführt.
  4. Am Lauf nehmen 3 000 Personen teil. Die App sortiert nach jedem Zieleinlauf die gesamte Liste neu; der neue Eintrag wird am Ende angehängt, die übrige Liste ist bereits sortiert. Bewerten Sie die drei Verfahren Selectionsort, Insertionsort und Bubblesort mit Abbruch für diese Situation.

Hinweise

Hinweis zu Aufgabe a)
Was passiert mit Ada und Cem, die beide 41 Minuten gelaufen sind?
Hinweis zu Aufgabe b)
Runde 1 sucht das Minimum 36 und tauscht es mit dem Element an Index 0.
Hinweis zu Aufgabe c)
Nehmen Sie Insertionsort: Verschoben wird nur, solange die Zeit echt größer ist. Jede Zuweisung an zeiten braucht eine passende an namen.
Hinweis zu Aufgabe d)
Wo gehört der neue Eintrag hin? Unterscheiden Sie eine sehr gute und eine sehr schwache Zeit — und denken Sie an Stabilität.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

Ada und Cem haben dieselbe Zeit 41. In der Ergebnisliste sollen sie in alphabetischer Reihenfolge stehen: Ada vor Cem. Ein stabiles Verfahren ändert die Reihenfolge gleicher Schlüssel nicht; da die Liste vorher alphabetisch war, bleibt Ada vor Cem. Ein instabiles Verfahren könnte Cem vor Ada setzen — die Liste wäre korrekt nach Zeit, aber nicht wie gefordert.

Erwartungshorizont zu Aufgabe b)

Runde 1: Minimum 36 (Dora, Index 3) wird mit Index 0 (Ada, 41) getauscht → Dora 36, Ben 38, Cem 41, Ada 41. Runde 2: Minimum 38 steht schon an Index 1. Runde 3: Vergleich 41 < 41 ist falsch, Cem bleibt vorn. Ergebnis: Dora 36, Ben 38, Cem 41, Ada 41. Cem steht vor Ada, obwohl Ada vorher vor Cem stand — der weite Tausch in Runde 1 hat Ada hinter Cem geworfen. Selectionsort ist also nicht stabil.

Erwartungshorizont zu Aufgabe c)

Stabil, weil nur bei zeiten[j] > aktZeit verschoben wird: ein Eintrag mit gleicher Zeit bleibt links vom einzufügenden. Bubblesort (Tausch nur bei >, beide Reihungen tauschen) ist ebenfalls korrekt. In Java wären zeiten und namen Parameter vom Typ int[] bzw. String[].

Erwartungshorizont zu Aufgabe d)

Selectionsort: ungeeignet — jede Neusortierung kostet \(\frac{3000\cdot2999}{2}\approx4{,}5\) Mio. Vergleiche, auch wenn nur ein Eintrag falsch steht; außerdem nicht stabil. Insertionsort: am besten — die ersten Elemente sind sortiert, jedes braucht nur einen Vergleich; der neue Eintrag wird von hinten an seinen Platz geschoben. Das kostet höchstens \(n-1\) Vergleiche plus die Verschiebungen bis zu seinem Platz, und es ist stabil. Bubblesort mit Abbruch: stabil und bei einer schwachen Zeit (Eintrag gehört ans Ende) schnell — ein Durchlauf ohne Tausch. Bei einer guten Zeit wandert der Eintrag aber pro Durchlauf nur einen Platz nach vorn; im schlimmsten Fall sind fast alle Durchläufe mit rund 4,5 Mio. Vergleichen nötig. Fazit: Insertionsort. (Noch besser wäre, den neuen Eintrag direkt einzufügen statt die ganze Liste neu zu sortieren.) Vollständig ist die Bewertung, wenn alle drei Verfahren nach Aufwand im konkreten Fall und nach Stabilität beurteilt werden.