MINT lernen

Übung AFB II

Zehn Aufgaben zum Zusammenhänge-Herstellen — Programme analysieren, Tracetabellen führen, Verfahren vergleichen und Laufzeiten hochrechnen.

Dein Fortschritt:
0 / 0 Aufgaben
2

Aufgabenblock — AFB II

Zehn Aufgaben aus allen Unterkapiteln: Programme analysieren, zweidimensionale Reihungen auswerten, Such- und Sortierverfahren verfolgen und Vergleichszahlen herleiten — mit gestuften Tipps, wenn du nicht weiterkommst.

A1
Weitsprung-Auswertung
AFB II

Beim Sportfest werden die Weiten einer Riege (in cm) ausgewertet:

int[] weite = {412, 385, 450, 398, 471, 405};
int summe = 0;
for (int w : weite) {
    summe = summe + w;
}
int schnitt = summe / weite.length;
int besser = 0;
for (int w : weite) {
    if (w > schnitt) {
        besser++;
    }
}

Analysieren Sie das Programm: Welche Werte haben schnitt und besser am Ende? Beachten Sie den Datentyp von schnitt.

Ansatz: Erst die Summe aller sechs Weiten bilden, dann ganzzahlig durch 6 teilen.
Rechenweg: summe = 2521; 2521 / 6 = 420 Rest 1 — bei int fällt der Rest weg. Dann zählen, welche Weiten echt größer als 420 sind.
Lösung: a) 420 b) 2
Vollständige Lösung
summe = 412 + 385 + 450 + 398 + 471 + 405 = 2521. 2521 / 6 ist eine Division zweier int-Werte, also ganzzahlig: schnitt = 420 (der genaue Mittelwert wäre 420,17). Größer als 420 sind nur 450 und 471: besser = 2. Hinweis: Für den genauen Mittelwert müsste man z. B. (double) summe / weite.length rechnen.
A2
Abstiege zählen
AFB II

Ein Höhenprofil einer Wanderung (in 100 m) wird mit folgendem Programmausschnitt untersucht:

int z = 0;
for (int i = 1; i < h.length; i++) {
    if (h[i] < h[i - 1]) {
        z++;
    }
}

Untersuchen Sie, wie oft der Schleifenrumpf ausgeführt wird und welchen Wert z am Ende hat. Beschreiben Sie für sich in einem Satz, was z zählt.

Ansatz: Die Schleife beginnt bei i = 1, weil immer mit dem Vorgänger h[i − 1] verglichen wird.
Rechenweg: i läuft von 1 bis 6. Paare: (5,9) (9,7) (7,7) (7,3) (3,8) (8,6) — wo ist der rechte Wert kleiner?
Lösung: a) 6 b) 3
Vollständige Lösung
Bei 7 Elementen läuft i von 1 bis 6, also 6 Durchläufe. Ein echter Abstieg liegt bei 9 → 7, 7 → 3 und 8 → 6 vor; 7 → 7 zählt nicht. z = 3 ist die Anzahl der Abschnitte, in denen es bergab geht. Würde die Schleife bei i = 0 starten, gäbe es beim Zugriff h[−1] einen Laufzeitfehler.
A3
Belegung im Kinosaal
AFB II

Ein kleiner Kinosaal hat 4 Reihen mit je 6 Plätzen. saal[r][p] ist 1, wenn der Platz besetzt ist, sonst 0.

saalp = 0p = 1p = 2p = 3p = 4p = 5
r = 0110110
r = 1001111
r = 2100010
r = 3111101

Ein Programm soll mit zwei verschachtelten Schleifen die Anzahl aller besetzten Plätze bestimmen und den Index der Reihe mit den meisten freien Plätzen ausgeben. Werten Sie die Tabelle so aus, wie es das Programm tun würde.

Ansatz: Äußere Schleife über die Reihen r, innere über die Plätze p; für jede Reihe die Nullen zählen.
Rechenweg: Besetzt je Reihe: 4, 4, 2, 5. Frei je Reihe: 2, 2, 4, 1.
Lösung: a) 15 b) Reihe 2
Vollständige Lösung
Besetzt: 4 + 4 + 2 + 5 = 15 von 24 Plätzen. Frei je Reihe: 2, 2, 4, 1 → die meisten freien Plätze hat Reihe mit Index 2 (die dritte Reihe). Programmidee: for (int r = 0; r < saal.length; r++) { int frei = 0; for (int p = 0; p < saal[r].length; p++) { if (saal[r][p] == 0) frei++; } if (frei > maxFrei) { maxFrei = frei; besteReihe = r; } }
A4
Dreieck unter der Diagonale
AFB II

Gegeben ist die quadratische Reihung m und ein Programmausschnitt:

int[][] m = {{4, 1, 7},
             {2, 8, 3},
             {6, 5, 9}};
int s = 0;
for (int i = 0; i < m.length; i++) {
    for (int j = 0; j < i; j++) {
        s = s + m[i][j];
    }
}

Ermitteln Sie den Endwert von s und die Anzahl der Additionen, die ausgeführt werden.

Ansatz: Die innere Schleife läuft nur bis j < i. Schreiben Sie für jedes i auf, welche j vorkommen.
Rechenweg: i = 0: kein j · i = 1: j = 0 → m[1][0] · i = 2: j = 0, 1 → m[2][0], m[2][1].
Lösung: a) 13 b) 3
Vollständige Lösung
Die innere Schleife besucht genau die Elemente unterhalb der Hauptdiagonale: m[1][0] = 2, m[2][0] = 6, m[2][1] = 5. \(s = 2 + 6 + 5 = 13\) mit \(0 + 1 + 2 = 3\) Additionen. Allgemein sind es bei einer \(n\times n\)-Reihung \(\frac{n(n-1)}{2}\) Additionen — dieselbe Zahl wie die Vergleiche bei Selectionsort.
A5
Erfolglose binäre Suche
AFB II

Die sortierte Reihung enthält Losnummern einer Tombola, die schon gezogen wurden:

Stellen Sie die binäre Suche nach 50 in einer Tracetabelle mit links, rechts, mitte, los[mitte] dar. Wie viele Elemente werden angesehen, und welchen Wert hat links, wenn die Schleife endet?

Ansatz: Start: links = 0, rechts = 14. Die Schleife läuft, solange links ≤ rechts.
Rechenweg: mitte = 7 (34 < 50) → links = 8 · mitte = 11 (52 > 50) → rechts = 10 · mitte = 9 (43 < 50) → links = 10 · mitte = 10 (47 < 50) → links = 11.
Lösung: a) 4 b) 11
Vollständige Lösung
linksrechtsmittelos[mitte]Vergleich
01473434 < 50
814115252 > 50
81094343 < 50
1010104747 < 50
1110——links > rechts: Ende
Nach 4 angesehenen Elementen ist links = 11 > rechts = 10: 50 ist nicht enthalten, Rückgabe −1. links = 11 ist genau die Stelle, an der 50 eingefügt werden müsste, damit die Reihung sortiert bleibt.
A6
Lineare gegen binäre Suche
AFB II

Ein Online-Shop hat 5000 Artikelnummern sortiert in einer Reihung gespeichert.

a) Vergleichen Sie die Anzahl der angesehenen Elemente im ungünstigsten Fall: lineare gegen binäre Suche. b) Wie viele Artikel darf die Reihung höchstens enthalten, damit die binäre Suche im ungünstigsten Fall mit 20 Schritten auskommt?

Artikel
Ansatz: Linear: im schlechtesten Fall jedes Element. Binär: \(\lfloor\log_2 n\rfloor + 1\) Schritte.
Rechenweg: \(2^{12} = 4096 \le 5000 < 8192 = 2^{13}\), also \(\lfloor\log_2 5000\rfloor = 12\). Für b) muss \(\lfloor\log_2 n\rfloor \le 19\), also \(n < 2^{20}\).
Lösung: a) 5000 und 13 b) \(2^{20}-1 = 1\,048\,575\)
Vollständige Lösung
Linear im ungünstigsten Fall 5000 Vergleiche, binär \(\lfloor\log_2 5000\rfloor + 1 = 13\) — etwa 385-mal weniger. Mit 20 Schritten schafft die binäre Suche alle \(n\) mit \(\lfloor\log_2 n\rfloor + 1 \le 20\), also \(n \le 2^{20} - 1 = 1\,048\,575\). Jeder zusätzliche Schritt verdoppelt die durchsuchbare Menge.
A7
Insertionsort verfolgen
AFB II

Die Punktzahlen eines Quiz werden mit Insertionsort aufsteigend sortiert. Der Schlüssel a[i] wird mit den Elementen links davon verglichen; größere rücken eine Stelle nach rechts.

Bestimmen Sie den Wert an Index 3, nachdem das Element mit Index 3 eingefügt wurde (Durchlauf i = 3), und die Anzahl aller Vergleiche zwischen Elementen bis zum Ende.

Ansatz: Nach jedem Durchlauf ist der linke Teil bis Index i sortiert. Ein Vergleich zählt auch dann, wenn er das Einfügen beendet.
Rechenweg: i = 1: 18 18 31 … (1 Vergleich) · i = 2: 18 25 31 (2) · i = 3: 12 wandert ganz nach vorn (3) · i = 4: 40 bleibt (1) · i = 5: 21 (4).
Lösung: a) 31 b) 1 + 2 + 3 + 1 + 4 = 11
Vollständige Lösung
iSchlüsselReihung danachVergleiche
11818 31 25 12 40 211
22518 25 31 12 40 212
31212 18 25 31 40 213
44012 18 25 31 40 211
52112 18 21 25 31 404
Nach i = 3 steht 31 an Index 3. Insgesamt 11 Vergleiche (bei i = 3 endet die Schleife am Rand, bei i = 5 am Vergleich 18 < 21) und 8 Verschiebungen.
A8
Bester und schlechtester Fall
AFB II

Zwölf Läuferinnen werden nach ihrer Zeit sortiert. Leiten Sie die Anzahl der Vergleiche von Insertionsort her a) wenn die Zeiten schon aufsteigend sortiert sind und b) wenn sie absteigend sortiert sind. c) Wie viele Vergleiche braucht Selectionsort in beiden Fällen?

Ansatz: Insertionsort fügt die Elemente mit Index 1 bis 11 ein. Wie viele Vergleiche braucht ein Element, das schon an der richtigen Stelle steht — und eins, das ganz nach vorn muss?
Rechenweg: Sortiert: je 1 Vergleich, 11 Einfügungen. Absteigend: das Element an Index \(i\) wird mit allen \(i\) Vorgängern verglichen: \(1+2+\dots+11\).
Lösung: a) 11 b) \(\frac{12\cdot11}{2}=66\) c) immer 66
Vollständige Lösung
a) Bei sortierten Daten endet jedes Einfügen nach genau einem Vergleich: \(n-1 = 11\). b) Bei absteigenden Daten muss jedes Element ganz nach vorn: \(1+2+\dots+11 = \frac{12\cdot11}{2} = 66\). c) Selectionsort sucht das Minimum immer im ganzen Rest, unabhängig von der Vorsortierung: stets \(\frac{n(n-1)}{2} = 66\). Insertionsort ist also bei fast sortierten Daten klar im Vorteil.
A9
Bubblesort mit Abbruch
AFB II

Ein Bubblesort merkt sich in einer Variablen getauscht, ob in einem Durchlauf vertauscht wurde, und bricht ab, wenn das nicht der Fall war. Jeder Durchlauf ist eine Stelle kürzer als der vorige.

Überprüfen Sie, nach wie vielen Durchläufen das Verfahren abbricht und wie viele Vergleiche es bis dahin braucht.

Ansatz: Durchlauf 1 prüft 5 Paare, Durchlauf 2 noch 4 Paare. Bricht das Verfahren ab, bevor die Reihung sortiert ist?
Rechenweg: D1: 7 ↔ 5 und 11 ↔ 10 werden vertauscht → 3 5 7 9 10 11. D2: kein Tausch → Abbruch.
Lösung: a) 2 b) 5 + 4 = 9
Vollständige Lösung
Durchlauf 1 (5 Vergleiche) vertauscht zweimal und liefert 3 5 7 9 10 11. Durchlauf 2 (4 Vergleiche) findet kein falsch geordnetes Paar, getauscht bleibt false → Abbruch. Zusammen 9 Vergleiche statt \(\frac{6\cdot5}{2} = 15\) ohne Abbruchbedingung. Der zweite Durchlauf ist nötig: Erst er bestätigt, dass nichts mehr zu tun ist.
A10
Laufzeit hochrechnen
AFB II

Ein Programm sortiert 10 000 Messwerte mit Selectionsort in 0,2 s und sucht danach einen Wert binär mit 14 angesehenen Elementen (ungünstigster Fall). Schätzen Sie ab, wie lange das Sortieren von 40 000 Messwerten dauert und wie viele Elemente die binäre Suche dann höchstens ansieht.

s
Elemente
Ansatz: Selectionsort wächst quadratisch: \(n\) vervierfacht → Vergleiche etwa \(4^2\)-fach. Die binäre Suche wächst logarithmisch.
Rechenweg: \(0{,}2\,\text{s} \cdot 16\). Für 40 000: \(2^{15} = 32\,768 \le 40\,000 < 65\,536\).
Lösung: a) 3,2 s b) 16
Vollständige Lösung
\(n\) wird vervierfacht. Die Vergleichszahl \(\frac{n(n-1)}{2}\) wächst dabei etwa um den Faktor \(4^2 = 16\): \(0{,}2\,\text{s} \cdot 16 = 3{,}2\,\text{s}\). Die binäre Suche braucht \(\lfloor\log_2 40\,000\rfloor + 1 = 15 + 1 = 16\) Schritte — jede Verdopplung von \(n\) kostet nur einen Schritt mehr (14 → 15 → 16).