MINT lernen

Zusammenfassung

Alles Wichtige zu Reihungen, Suchen, Sortieren und Effizienz auf einen Blick — mit den Formeln, die in der Klausur zählen.

1

Daten in Reihungen

Eine Reihung fasst eine feste Anzahl gleichartiger Werte unter einem Namen zusammen; fast jede Auswertung ist ein Durchlauf mit einer Zählschleife.

Reihung und Index

Feste Länge, ein Datentyp, Zugriff über den Index ab 0. Ein Index außerhalb von 0 … Länge − 1 führt zur ArrayIndexOutOfBoundsException.

int[] a = new int[n];

Durchlaufen

Die Zählschleife besucht jedes Element genau einmal; a.length statt fester Zahlen schreiben.

for (int i = 0; i < a.length; i++)

Summe, Zählen, Maximum

Akkumulator vor der Schleife: Summe und Zähler mit 0, Maximum mit dem ersten Element.

if (a[i] > max) max = a[i];

Zweidimensional

Erst Zeile, dann Spalte; m.length Zeilen, m[0].length Spalten; zwei verschachtelte Schleifen.

m[zeile][spalte]

Ganzzahlige Division

Mit int-Werten ist summe / n ganzzahlig: 17 / 4 = 4. Für den genauen Mittelwert (double) summe / n.

2

Suchen: linear oder binär

Die lineare Suche funktioniert immer; die binäre braucht eine sortierte Reihung und halbiert dafür den Suchbereich mit jedem Vergleich.

Lineare Suche

Ab Index 0 vergleichen, beim ersten Treffer den Index liefern, sonst −1.

1 bis \(n\) Vergleiche

Binäre Suche

Mitte des Bereichs links … rechts vergleichen, danach links ← mitte + 1 oder rechts ← mitte − 1; Ende bei links > rechts.

mitte = (links + rechts) / 2

Warum die Mitte?

Im ungünstigsten Fall bleibt der größere Teil übrig — nur der Schnitt in der Mitte garantiert höchstens die Hälfte.

\(V(n) = 1 + V(\lfloor n/2 \rfloor)\)

Varianten

Erstes Vorkommen oder erster Wert ab einer Schwelle: Treffer merken und links weitersuchen — immer noch logarithmisch.

erg ← mitte; rechts ← mitte − 1
Binäre Suche im ungünstigsten Fall
\(\lfloor\log_2 n\rfloor + 1\) Vergleiche

Aus \(V(n) = 1 + V(\lfloor n/2 \rfloor)\), \(V(1) = 1\). Beispiel: \(n = 1\,000\,000\) → 20 Vergleiche statt einer Million.

Voraussetzung nennen

Auf unsortierten Daten liefert die binäre Suche still falsche Ergebnisse. Die Reihung muss nach genau dem Merkmal sortiert sein, nach dem gesucht wird.

3

Sortieren und vergleichen

Die drei einfachen Verfahren sortieren in-place und brauchen im ungünstigsten Fall quadratisch viele Vergleiche; sie unterscheiden sich bei Vertauschungen, Stabilität und vorsortierten Daten.

VerfahrenIdeeVergleichestabil?vorsortiert
SelectionsortMinimum des Rests nach vorn tauschenimmer \(\frac{n(n-1)}{2}\)neinkein Vorteil
Insertionsortnächstes Element in den sortierten Teil einfügen\(n-1\) bis \(\frac{n(n-1)}{2}\)ja\(O(n)\)
BubblesortNachbarn tauschen, Größtes wandert nach hinten\(\frac{n(n-1)}{2}\), mit Abbruch ab \(n-1\)ja\(O(n)\) mit Abbruch
Vergleiche im ungünstigsten Fall
\((n-1)+(n-2)+\dots+1=\dfrac{n(n-1)}{2}\)

Doppelte Datenmenge → etwa vierfache Arbeit. Beispiel: \(n = 1000\) → 499 500 Vergleiche.

Umstellungen zählen

Bubblesort-Vertauschungen und Insertionsort-Verschiebungen beseitigen je ein falsch stehendes Paar — gleich viele, aber ein Tausch kostet drei Zuweisungen.

4

Operationen zählen und O-Notation

Laufzeit wird rechnerunabhängig durch Zählen bestimmt und für große \(n\) nach ihrem Wachstum eingeordnet.

Zählregeln

Sequenz addieren, Schleife: Rumpf \(n\)-mal (Bedingung \(n + 1\)-mal), Verzweigung: teurerer Zweig, verschachtelt: aufsummieren.

\(T(n) = 3n + 3\)

Verschachtelte Schleifen

Unabhängige Grenzen multiplizieren sich, eine innere Schleife ab i + 1 ergibt die Dreieckssumme, Halbieren \(\lfloor\log_2 n\rfloor\).

\(n^2\) · \(\frac{n(n-1)}{2}\) · \(\log_2 n\)

O-Notation

Obere Schranke fürs Wachstum; Konstanten und kleinere Summanden entfallen.

\(T(n) \le c \cdot f(n)\) für \(n \ge n_0\)

Klassen

Rangfolge von langsam nach schnell wachsend; Verdopplung von \(n\): gleich, +1, ·2, etwas mehr als ·2, ·4, quadriert.

\(1,\ \log n,\ n,\ n \log n,\ n^2,\ 2^n\)
Definition der O-Notation
\(T(n) \in O(f(n)) \;\Leftrightarrow\; \exists\, c > 0,\, n_0:\ T(n) \le c \cdot f(n) \text{ für alle } n \ge n_0\)

Beispiel: \(3n^2 + 5n + 2 \le 10n^2\) für \(n \ge 1\), also \(\in O(n^2)\). Für kleine \(n\) können Konstanten die Reihenfolge umdrehen.

Hochrechnen

Bei \(O(n^2)\) wird die Zeit bei zehnfacher Datenmenge etwa verhundertfacht; bei \(O(\log n)\) kommen nur gut drei Schritte hinzu.

5

Speicher und Urteil

Effizienz beurteilen heißt: Zeit und Speicher für die konkreten Daten und ihre Nutzung abwägen.

Speicher einer Reihung

Anzahl der Elemente · Byte je Element (boolean 1, char 2, int 4, double 8); Tabellen zusätzlich je Zeile Kopf und Referenz.

new int[n] ≈ \(4n\) Byte

Zusatzspeicher

In-place \(O(1)\); Kopie \(O(n)\); Markierungsreihung \(O(W)\) für den Wertebereich; Rekursion kostet Stapelspeicher.

in-place · Kopie · Markierung

Zeit gegen Speicher

Eine Markierungsreihung macht aus \(O(n^2)\) Vergleichen einen Durchlauf — lohnt sich nur bei kleinem Wertebereich.

\(O(n^2), O(1)\) ↔ \(O(n + W), O(W)\)

Sortieren lohnt ab …

Einmal einfach sortieren und \(k\)-mal binär suchen ist günstiger als \(k\) lineare Suchen etwa ab \(k \approx \frac{n}{2}\).

\(k \cdot n \ge \frac{n(n-1)}{2} + k \log_2 n\)

Urteil in vier Schritten

Kriterium nennen, für den Fall Zahlen oder Klassen bestimmen, Voraussetzungen und Zusatzkosten abwägen, Fazit mit Bedingung formulieren.

6

Die Regeln, an denen die Punkte hängen

In Klausuren zu Reihungen und Effizienz gehen die meisten Punkte bei Grenzen, beim Zählen und bei unbegründeten Urteilen verloren.

Regel 1 — Grenzen prüfen

Jede Schleife am ersten und letzten Durchlauf testen: < oder <=? Liest der Rumpf a[i + 1], endet die Schleife einen Schritt früher.

Regel 2 — Zählen wie vereinbart

Vorher festlegen, was gezählt wird (Vergleiche, Vertauschungen, Verschiebungen, Bedingungsprüfungen). Formeln mit \(n = 4\) gegenprüfen.

Regel 3 — Fall angeben

Bester, ungünstigster oder durchschnittlicher Fall — ohne Angabe gilt der ungünstigste. Die Eingabe benennen, die ihn erzeugt.

Regel 4 — Urteilen statt behaupten

Mit Klasse und konkreten Zahlen argumentieren, Speicher und Voraussetzungen nennen und das Fazit an eine Bedingung knüpfen („… solange weniger als \(\frac{n}{2}\) Suchen anfallen“).

1AFB I — Reproduzieren10 Aufgaben› ?Selbsttest40 Fragen mit Auswertung›