Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Big O: wie schnell ist ein Algorithmus?

Nach dieser Lektion: Ich kann Algorithmen danach vergleichen, wie ihre Zahl der Schritte wächst.

Lektion, 50 Min.4 BefehleJupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Warum eine App bei vielen Daten lahmt

Die Zeitkomplexität sagt, wie stark die Zahl der Schritte eines Algorithmus wächst, wenn die Datenmenge wächst. Big O ist die kurze Schreibweise dafür, zum Beispiel O(n) oder O(n²).

Eine App kann mit 100 Einträgen flott laufen und mit einer Million stehen bleiben. Mit Big O siehst du das voraus, bevor du etwas baust.

Am Ende dieser Lektion

Notiz

Ich kann Algorithmen danach vergleichen, wie ihre Zahl der Schritte wächst.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Schritteine einzelne Grundaktion, etwa ein Vergleich
Zeitkomplexitätwie die Zahl der Schritte mit der Datenmenge wächst
Big Odie Schreibweise für die Art des WachstumsO(n)
Lineardoppelt so viele Daten, doppelt so viele SchritteO(n)
Quadratischdoppelt so viele Daten, viermal so viele SchritteO(n²)
Logarithmischdoppelt so viele Daten, nur ein Schritt mehrO(log n)

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Warum wir Schritte zählen und keine Sekunden

Wie viele Sekunden ein Programm braucht, hängt vom Gerät ab: von deinem Handy, deinem Laptop oder einem Server. Dieselbe Zahl von Schritten ergibt auf jedem Gerät etwas anderes.

Die Zahl der Schritte dagegen ist auf jedem Gerät gleich und lässt sich genau zählen. Darum vergleichen wir Algorithmen damit.

Wie die Schritte mit n wachsen

nO(1)O(log n)O(n)O(n²)
101410100
1001710010000
10001101000eine Million

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Bevor du anfängst

Notiz

Drück oben in der Leiste auf Lab starten und warte, bis JupyterLab läuft. Die Schaltflächen Ausführen tippen ihren Befehl in das Terminal neben dem Lab. Jeder startet Python im Container jupyter.

n mal n für drei Größen ausrechnen

Befehl
docker exec jupyter python3 -c "print([n * n for n in [10, 100, 1000]])"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Vergleiche von Bubble Sort bei wachsendem n

Bubble Sort läuft mit einer Schleife in der Schleife. Der nächste Befehl schreibt ein Programm, das nur die Vergleiche zählt, bei 10, 20, 40 und 80 Werten. Es sortiert nichts. Der zweite Befehl startet es.

Das Zählprogramm in wachstum.py schreiben

Befehl
docker exec jupyter sh -c "printf 'for n in [10, 20, 40, 80]:\n    vergleiche = 0\n    for runde in range(n - 1):\n        for i in range(n - 1 - runde):\n            vergleiche = vergleiche + 1\n    print(n, vergleiche)\n' > wachstum.py"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Vergleiche zählen lassen

Befehl
docker exec jupyter python3 wachstum.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Was die Zahlen zeigen

nVergleicheIm Vergleich zur Zeile davor
1045Der Anfang
20190n doppelt, gut das Vierfache
40780n doppelt, gut das Vierfache
803160n doppelt, gut das Vierfache

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Big O lässt Zahlen und kleine Teile weg

Bei einem großen n zählt nur der Teil, der am schnellsten wächst. Faktoren wie 3 und kleine Summanden wie 5 lässt man weg. Zwei Schleifen nacheinander addieren sich, eine Schleife in einer Schleife multipliziert.

So sagt O(n) nur: Die Schritte wachsen im gleichen Verhältnis wie n.

Beispiele für das Weglassen

SchritteBig OGrund
3n + 5O(n)Der Faktor 3 und die 5 fallen weg
n² + nO(n²)n² wächst schneller als n
Zwei Schleifen nacheinander, je nO(n)n + n ist 2n
Schleife in Schleife, je nO(n²)n mal n

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein häufiger Fehler

Warnung

Viele glauben, O(n) heiße genau n Schritte. Es heißt nur: Die Schritte wachsen im gleichen Verhältnis wie n. Ein Algorithmus mit 3n Schritten und einer mit n Schritten sind beide O(n), sie unterscheiden sich nur im Faktor.

Die Schritte der binären Suche nachrechnen

Befehl
docker exec jupyter python3 -c "print([n.bit_length() for n in [10, 100, 1000]])"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Weiterführend: zwei Wege zur Summe

Die Summe der Zahlen von 1 bis n lässt sich mit einer Schleife berechnen, das sind n Schritte. Es geht auch mit der Formel n mal (n + 1) geteilt durch 2, in einem einzigen Schritt. Welche Klasse hat jeder Weg? Welchen würdest du bei einer Milliarde wählen?

Über dieses Lab und seinen Quellcode: JupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.