📘 CodingMarble Learn

Algorithmen-Komplexität: Wie schnell wächst der Aufwand?

Viele Algorithmen lösen dasselbe Problem, aber manche brauchen viel mehr Schritte. Wir messen einen Algorithmus, indem wir seine Grundschritte zählen, wenn die Eingabegröße n wächst, und nicht mit der Stoppuhr. Die Big-O-Notation benennt dieses Wachstum: O(1) konstant, O(log n) logarithmisch, O(n) linear, O(n log n) und O(n²) quadratisch. Lineare Suche ist O(n), binäre Suche ist O(log n); Bubble-Sort ist O(n²), Merge-Sort ist O(n log n). Der benötigte Speicher heißt Speicherkomplexität.

🎬 Geschichte Schritt für Schritt

  1. Finde die Zahl 13 in 16 Kisten, indem du sie nacheinander öffnest. Jede geöffnete Kiste ist ein Schritt. Das ist die lineare Suche: bis zu n Schritte.
  2. Liegen die Kisten in der richtigen Reihenfolge, öffne die mittlere und wirf die falsche Hälfte weg. Wiederhole das. Die binäre Suche findet 13 in nur 4 Schritten.
  3. Jetzt vergleichen wir fünf Arten von Algorithmen bei n = 16. Die Höhe des Balkens zeigt die Anzahl der Schritte. Manche bleiben winzig, einer ist riesig.
  4. Verdopple die Eingabe von 8 auf 16. O(n) verdoppelt sich, O(n²) wird viermal so groß und O(log n) wächst nur um 1.
  5. 1000 Elemente sortieren: Bubble-Sort braucht etwa eine Million Vergleiche, Merge-Sort nur etwa zehntausend. Bei großen Eingaben zählt die Wachstumsrate am meisten.
  6. Du bist dran: Schiebe den n-Regler von 2 bis 1024. Beobachte, welcher Balken am schnellsten in die Höhe schießt.

Tipp: Zieh die 3D-Szene, um sie zu drehen. Mit zwei Fingern zoomst du.

🤔 Häufige Zweifel, geklärt

Warum nicht einfach das Programm mit der Stoppuhr messen?

Die Zeit ändert sich von Computer zu Computer. Die Schrittzahl nicht. Schritt 1 zählt geöffnete Kisten, nicht Sekunden.

Warum kann die binäre Suche die Hälfte der Kisten überspringen?

Die Kisten sind geordnet. Ist die mittlere Zahl kleiner als das Ziel, ist alles links davon auch kleiner, also kann keine dieser Kisten die Antwort sein. Beobachte die grauen Kisten in Schritt 2.

Warum lassen wir bei Big O die Konstanten weg?

Big O beschreibt, wie schnell die Arbeit wächst. 2n und n verdoppeln sich beide, wenn sich n verdoppelt, sie wachsen also gleich. Schritt 4 zeigt die Verdopplung.

Ist O(n²) immer langsamer als O(n log n)?

Bei winzigem n kann es sogar schneller sein, aber wenn n wächst, zieht n² schnell davon. In Schritt 5 mit n = 1000 beträgt der Abstand etwa das 100-Fache.

Was bedeutet log n hier eigentlich?

log₂ n ist, wie oft du n halbieren kannst, bis du bei 1 ankommst. Bei 1024 sind es 10. Bewege den Regler im letzten Schritt und sieh, dass der blaue Balken bei jeder Verdopplung von n nur um 1 wächst.

Viele Algorithmen für ein Problem

Ein Algorithmus ist eine Reihe genauer Schritte, die ein Problem lösen. Die meisten Probleme lassen sich mit mehr als einem Algorithmus lösen. Um zum Beispiel einen Namen in einer Liste zu finden, kannst du jeden Namen prüfen oder (wenn die Liste sortiert ist) die Liste immer wieder halbieren.

Beide liefern die richtige Antwort. Der Unterschied ist die Effizienz: wie viel Arbeit und Speicher jeder braucht. Gute Programmierer wählen den Algorithmus, der auch bei großen Datenmengen schnell bleibt.

Algorithmen nach der benötigten Zeit vergleichen

Mit der Stoppuhr zu messen ist unfair: Ein schneller Computer lässt einen langsamen Algorithmus gut aussehen. Deshalb zählen wir Grundschritte (Vergleiche, Vertauschungen, Additionen) in Abhängigkeit von der Eingabegröße n.

Bester, durchschnittlicher und schlechtester Fall

Der beste Fall ist die glücklichste Eingabe (13 liegt in der ersten Kiste: 1 Schritt). Der schlechteste Fall ist die unglücklichste (13 ist nicht da: n Schritte). Meistens nennen wir den schlechtesten Fall, denn er ist ein Versprechen: Der Algorithmus wird nie langsamer als das.

Zeitkomplexität und Speicherkomplexität

Die Zeitkomplexität sagt, wie die Zahl der Schritte mit n wächst. Die Speicherkomplexität sagt, wie der zusätzliche Speicher mit n wächst. Merge-Sort ist schnell, braucht aber zusätzlichen Speicher; Bubble-Sort braucht fast keinen zusätzlichen Speicher, ist aber langsam.

Big-O-Notation

Big O beschreibt die Wachstumsrate und ignoriert kleine Details. Wir behalten nur den größten Term und lassen konstante Zahlen weg: 3n² + 5n + 2 wird zu O(n²), weil bei großem n der n²-Teil fast alles ausmacht.

Big ONamen = 16n = 1000Beispiel
O(1)konstant11Element 5 eines Arrays lesen
O(log n)logarithmisch4etwa 10binäre Suche
O(n)linear161000lineare Suche, größte Zahl finden
O(n log n)n log n64etwa 10.000Merge-Sort
O(n²)quadratisch2561.000.000Bubble-Sort, verschachtelte Schleifen

Faustregel für Code: Eine Schleife über n Elemente ist O(n); eine Schleife in einer Schleife ist O(n²); wenn das Problem jedes Mal halbiert wird, ist es O(log n).

Effizienz von linearer und binärer Suche

Die lineare Suche prüft die Elemente eins nach dem anderen. Schlechtester Fall: n Vergleiche, also O(n). Sie funktioniert bei jeder Liste, sortiert oder nicht.

Die binäre Suche braucht eine sortierte Liste. Schau auf die Mitte; ist sie zu groß, wirf die rechte Hälfte weg, sonst die linke. Jeder Schritt halbiert die Liste, also sind es im schlechtesten Fall etwa log₂ n + 1 Vergleiche: O(log n). Bei 1.000.000 Elementen sind das etwa 20 Schritte statt 1.000.000.

Effizienz von Sortieralgorithmen

Bubble-, Insertion- und Selection-Sort benutzen eine Schleife in einer Schleife und brauchen daher etwa n²/2 Vergleiche: O(n²). Insertion-Sort ist im besten Fall (eine schon sortierte Liste) O(n).

Merge-Sort halbiert die Liste etwa log₂ n Mal und leistet auf jeder Ebene etwa n Arbeit: O(n log n). Er braucht O(n) zusätzlichen Speicher.

Die binäre Suche braucht eine sortierte Liste. Wenn du nur einmal suchst, kostet das Sortieren vorher (n log n) mehr als eine lineare Suche (n). Wenn du oft suchst, lohnt sich einmaliges Sortieren.

Vorbedingung, Nachbedingung und Fallen der Rekursion

Eine Vorbedingung ist das, was vor dem Start des Algorithmus gelten muss (binäre Suche: die Liste ist sortiert). Eine Nachbedingung ist das, was am Ende versprochen wird (Sortieren: jedes Element ist kleiner oder gleich dem nächsten). Wenn du sie aufschreibst, kannst du den Algorithmus leichter testen und beweisen.

Rekursion heißt, dass eine Funktion sich selbst für ein kleineres Problem aufruft. Häufige Fehler:

Probier es aus: zwei Suchen im Wettrennen

Schreibe die Zahlen 1 bis 32 auf Papierzettel und lege sie in der richtigen Reihenfolge mit der Schrift nach unten hin. Eine Freundin oder ein Freund denkt sich eine geheime Zahl aus. Suche zuerst Zettel für Zettel und zähle, wie viele Zettel du umdrehst. Suche dann, indem du immer den mittleren Zettel umdrehst. Wiederhole das 5 Mal. Welche Methode brauchte nie mehr als 6 Umdrehungen? Prüfe es mit dem Regler im letzten 3D-Schritt (n = 32: log₂ 32 = 5).

Wichtige Formeln und Definitionen

Gelöste Beispiele

1. Eine Liste hat 50 Namen. Wie viele Vergleiche braucht die lineare Suche im besten und im schlechtesten Fall?

Bester Fall: Der Name steht an erster Stelle → 1 Vergleich. Schlechtester Fall: Der Name steht ganz hinten oder fehlt → 50 Vergleiche. Die lineare Suche ist O(n).

2. Wie viele Vergleiche braucht die binäre Suche höchstens bei einer sortierten Liste mit 1024 Elementen?

Jeder Schritt halbiert die Liste: 1024 → 512 → 256 → 128 → 64 → 32 → 16 → 8 → 4 → 2 → 1. Das sind 10 Halbierungen plus die letzte Prüfung: höchstens 11 Vergleiche (log₂ 1024 = 10).

3. Gib das Big O von f(n) = 4n² + 10n + 7 an.

Behalte den größten Term (4n²) und lass die Konstante 4 weg: O(n²).

4. Eine Schleife lässt i von 1 bis n laufen, und darin läuft eine zweite Schleife mit j von 1 bis n. Wie oft läuft die innere Zeile?

n Mal für jeden der n Werte von i: n × n = n². Zeitkomplexität O(n²).

5. Ein O(n²)-Programm sortiert 1000 Elemente in 2 Sekunden. Wie lange dauert es ungefähr für 3000 Elemente?

n wird 3 Mal so groß, also wird n² zu 3² = 9 Mal so groß: etwa 2 × 9 = 18 Sekunden.

6. Vergleiche Bubble-Sort und Merge-Sort für n = 1000 Elemente.

Bubble-Sort: etwa n²/2 = 500.000 Vergleiche. Merge-Sort: etwa n log₂ n = 1000 × 10 = 10.000. Merge-Sort leistet etwa 50 Mal weniger Arbeit, braucht aber zusätzlichen Speicher.

Häufige Fehler

Übungsquiz

1. Wie hoch ist die Zeitkomplexität der linearen Suche im schlechtesten Fall?
2. Binäre Suche funktioniert nur, wenn die Liste:
3. Wenn sich n verdoppelt, braucht ein O(n²)-Algorithmus etwa:
4. Welche Sortierung ist O(n log n)?
5. Das Big O von 7n + 300 ist:

Üben: Beantworte diese selbst

Tippe oder wähle deine Antwort und drücke dann Prüfen. Nutze einen Tipp, wenn du nicht weiterkommst; die ganze Lösung erscheint nach deiner Antwort.

Häufig gestellte Fragen

Was ist Zeitkomplexität in einfachen Worten?

Sie sagt, wie die Zahl der Schritte eines Algorithmus wächst, wenn die Eingabe größer wird. O(n) heißt zum Beispiel: doppelte Eingabe, doppelt so viele Schritte.

Was ist der Unterschied zwischen Zeit- und Speicherkomplexität?

Die Zeitkomplexität misst Schritte; die Speicherkomplexität misst zusätzlichen Speicher. Ein Algorithmus kann schnell sein und trotzdem viel Speicher brauchen, wie Merge-Sort.

Welches Big O ist das schnellste?

O(1) (konstant) ist am besten, dann kommen O(log n), O(n), O(n log n), O(n²), und das exponentielle O(2ⁿ) ist das schlechteste der gängigen.

Wo das unterrichtet wird

Canada (Ontario)Grade 12C. Designing Modular Programs
Ukraine11 класAlgorithms
England (GCSE, A level)Year 103.1 Fundamentals of algorithms
USA (Common Core, NGSS, AP)Grade 11Selection and Iteration
USA (Common Core, NGSS, AP)Grade 11Algorithms and Programming
South Korea고등학교 2학년Algorithms and programming
South Korea고등학교 3학년Abstraction and algorithms

Vorher lernen

Als Nächstes lernen