MINT üben

Reihungen, Suchen, Sortieren

Zehn Aufgaben zum Verallgemeinern und Beurteilen — widerlegen, entwerfen, implementieren, Fehler finden und Verfahren begründet auswählen.

Dein Fortschritt:
0 / 0 Aufgaben
3

Aufgabenblock — AFB III

Begründen statt nur ausführen: Behauptungen widerlegen, Algorithmen entwerfen und implementieren, Verfahren beurteilen, Fehler finden und Formeln allgemein zeigen. Jede Aufgabe hat ein prüfbares Kernergebnis — formuliere die Begründung trotzdem in ganzen Sätzen, bevor du die Musterlösung aufklappst.

A1
Ist binär immer schneller?
AFB III

Mia behauptet: „Auf einer sortierten Reihung ist die binäre Suche immer schneller als die lineare Suche.“ Widerlegen Sie die Behauptung mit der sortierten Reihung gerade = {2, 4, 6, …, 62} (31 Elemente).

Geben Sie für Ihr Gegenbeispiel die Suche nach dem Wert 2 an: Wie viele Elemente sieht die binäre Suche an?

Elemente
Strategie: Einen Suchwert wählen, den die lineare Suche sofort findet.Warum so? Eine Aussage mit „immer“ ist widerlegt, sobald ein einziger Fall sie verletzt.
Lösungsskizze: Suche nach 2: linear 1 Vergleich. Binär: mitte = 15, 7, 3, 1, 0 → 5 Schritte.
Musterlösung anzeigen

Musterlösung: Gesucht wird der Wert 2, das erste Element. Die lineare Suche findet ihn nach genau einem Vergleich. Die binäre Suche beginnt in der Mitte: mitte = 15, 7, 3, 1, 0 — erst im fünften Schritt ist gerade[0] = 2 erreicht.

In diesem Fall ist die lineare Suche also schneller; die Behauptung ist widerlegt. Richtig ist: Im ungünstigsten Fall (und im Mittel bei großen \(n\)) braucht die binäre Suche viel weniger Schritte (\(\lfloor\log_2 n\rfloor+1\) statt \(n\)).

A2
Zweitgrößter Wert in einem Durchlauf
AFB III

Aus den Punktzahlen eines Wettbewerbs soll der zweitgrößte verschiedene Wert ermittelt werden, ohne die Reihung zu sortieren und mit nur einem Durchlauf.

Entwerfen Sie einen Algorithmus als Struktogramm. Welchen Wert liefert er für die abgebildete Reihung?

Strategie: Zwei Variablen mitführen: das bisher größte und das bisher zweitgrößte Element.Warum so? Ein Durchlauf reicht, wenn man für jedes neue Element entscheidet, ob es das Maximum ablöst, nur das zweite ersetzt oder gar nichts ändert.
Lösungsskizze: Ist x > max: zweit ← max, max ← x. Sonst, wenn x < max und x > zweit: zweit ← x. Gleiche Werte wie max ignorieren.
Musterlösung anzeigen

Musterlösung:

Ablauf: max/zweit = 14/−∞ → 27/14 → 27/14 (9) → 27/14 (27 gleich max, ignoriert) → 27/21 → 27/21 (18). Ergebnis 21. Ohne die Bedingung punkte[i] < max würde die zweite 27 als „zweitgrößter“ Wert gespeichert. Der Algorithmus braucht höchstens \(2(n-1)\) Vergleiche — linear, statt quadratisch wie Sortieren mit Selectionsort.

A3
Methode istSortiert
AFB III

Bevor ein Programm binär sucht, soll es prüfen, ob die Reihung aufsteigend sortiert ist (gleiche Nachbarn sind erlaubt). Implementieren Sie die Methode boolean istSortiert(int[] a) in Java so, dass sie beim ersten falsch geordneten Nachbarpaar abbricht.

Wie viele Vergleiche zwischen Nachbarn führt Ihre Methode für die abgebildete Reihung aus?

Strategie: Nachbarpaare a[i − 1] und a[i] für i ab 1 prüfen; beim ersten Paar mit a[i] < a[i − 1] sofort false zurückgeben.Warum so? Sortiert heißt: kein Paar steht falsch herum. Ein einziges falsches Paar reicht als Gegenbeweis.
Lösungsskizze: Paare (2,5) (5,5) (5,9) (9,4) → beim vierten Vergleich ist 4 < 9 → false.
Musterlösung anzeigen

Musterlösung:

public static boolean istSortiert(int[] a) {
    for (int i = 1; i < a.length; i++) {
        if (a[i] < a[i - 1]) {
            return false;   // erstes falsches Paar
        }
    }
    return true;            // kein falsches Paar gefunden
}

Für die Reihung werden (2,5), (5,5), (5,9) und (9,4) geprüft: 4 Vergleiche, Ergebnis false. Bei einer sortierten Reihung der Länge \(n\) sind es \(n-1\) Vergleiche. Wichtig: return true steht nach der Schleife; ein else return true in der Schleife würde schon nach dem ersten Paar antworten. Die Bedingung < (nicht <=) lässt gleiche Nachbarn zu.