Big O-Notation: Der ultimative Interview-Leitfaden
In this article
- 1. Das Kernkonzept: Worst-Case-Analyse
- 2. Gängige Komplexitäten (Rangfolge)
- 3. Speicherkomplexität: Der stille Killer
- 4. Big O berechnen wie ein Profi
- Regel 1: Konstanten weglassen
- Regel 2: Nicht-dominante Terme weglassen
- Regel 3: Verschiedene Eingaben, verschiedene Variablen
- 5. Datenstrukturen Cheat Sheet
- 6. Die BUD-Methode zur Optimierung
- 7. Praktische Implementierung: Duplikate finden
- Suboptimaler Ansatz (O(n²) Zeit, O(1) Speicher)
- Optimaler Ansatz (O(n) Zeit, O(n) Speicher)
- 8. Interview-Strategie: Komplexität kommunizieren
- 9. Zusammenfassung
In technischen Interviews ist die Big O-Notation die wichtigste Sprache, um Ihre Fähigkeit zu bewerten, skalierbaren Code zu schreiben. Es geht nicht nur um Mathematik, sondern darum, Abwägungen zwischen Geschwindigkeit und Speicher zu treffen. Dieser Leitfaden deckt alles ab, was Sie wissen müssen, um souverän in Ihr nächstes Interview zu gehen.
1. Das Kernkonzept: Worst-Case-Analyse
Die Big O-Notation beschreibt die obere Schranke der Wachstumsrate eines Algorithmus. Während wir oft den “Average Case” erwähnen, interessieren sich Interviewer fast immer für das Worst-Case-Szenario.
- Zeitkomplexität: Wie viele Operationen führt der Algorithmus aus, wenn wächst?
- Speicherkomplexität: Wie viel zusätzlichen Speicher (RAM) verbraucht der Algorithmus im Verhältnis zu ?

2. Gängige Komplexitäten (Rangfolge)
| Notation | Name | Geschwindigkeit | Praxisbeispiel |
|---|---|---|---|
| Konstant | Exzellent | Zugriff auf einen Array-Index oder einen Hash Map-Schlüssel. | |
| Logarithmisch | Großartig | Binäre Suche in einer sortierten Sammlung. | |
| Linear | Gut | Finden des maximalen Elements in einer unsortierten Liste. | |
| Linearithemisch | Akzeptabel | Die effizientesten Sortieralgorithmen (Merge Sort). | |
| Quadratisch | Schwach | Verschachtelte Schleifen (Überprüfung jedes Paares in einer Liste). | |
| Exponentiell | Schrecklich | Rekursives Fibonacci oder Generierung einer Potenzmenge. | |
| Faktoriell | Katastrophal | Lösung des Problems des Handlungsreisenden mittels Brute-Force. |
3. Speicherkomplexität: Der stille Killer
Interviewer “warten” oft darauf, dass Sie den Speicherbedarf erwähnen. Wenn Sie die Zeit durch Verwendung einer Hash Map optimieren, tauschen Sie Speicher gegen Zeit.
- Speicher: Sie verwenden nur wenige Variablen, unabhängig von der Eingabegröße.
- Speicher: Sie erstellen ein neues Array oder eine Map der Größe .
- Speicher: Häufig bei rekursiven Aufrufen (Tiefe des Call Stacks).
4. Big O berechnen wie ein Profi
Befolgen Sie diese drei Regeln während Ihrer Whiteboard-Session:
Regel 1: Konstanten weglassen
ist einfach . ist einfach . Konzentrieren Sie sich auf den Trend, nicht auf die exakte Anzahl.
Regel 2: Nicht-dominante Terme weglassen
In wächst der -Term so viel schneller, dass das irrelevant wird.
Regel 3: Verschiedene Eingaben, verschiedene Variablen
Wenn Ihre Funktion zwei verschiedene Listen verarbeitet, gehen Sie nicht davon aus, dass sie die gleiche Größe haben.
listAundlistBoder , wenn verschachtelt.
5. Datenstrukturen Cheat Sheet
Prägen Sie sich diese für - vs. -Entscheidungen ein. Vertiefende Informationen und Implementierungen finden Sie in unserem Leitfaden für Datenstrukturen.
| Datenstruktur | Zugriff | Suche | Einfügen | Löschen |
|---|---|---|---|---|
| Array | ||||
| Hash Map / Set | n/a | |||
| Linked List | ||||
| Stack / Queue | ||||
| Binary Search Tree | ||||
| Graph | n.v. |
6. Die BUD-Methode zur Optimierung
Wenn ein Interviewer fragt: “Können wir es besser machen als ?”, nutzen Sie BUD:
- Bottlenecks (Engpässe): Welcher Teil dauert am längsten? (z. B. ein verstecktes
indexOfinnerhalb einer Schleife). - Unnecessary Work (Unnötige Arbeit): Verarbeiten Sie Elemente, die Sie nicht benötigen?
- Duplicated Work (Doppelte Arbeit): Berechnen Sie Werte mehrfach? (Nutzen Sie Memoization).
7. Praktische Implementierung: Duplikate finden
Suboptimaler Ansatz (O(n²) Zeit, O(1) Speicher)
function hasDuplicates(arr: number[]): boolean { for (let i = 0; i < arr.length; i++) { for (let j = i + 1; j < arr.length; j++) { if (arr[i] === arr[j]) return true; // Verschachtelte Schleife! } } return false;}Optimaler Ansatz (O(n) Zeit, O(n) Speicher)
Wir tauschen Speicher (das Set) gegen eine deutlich schnellere Ausführung.
function hasDuplicatesOptimized(arr: number[]): boolean { const seen = new Set<number>(); for (const num of arr) { if (seen.has(num)) return true; // Set-Lookup ist O(1) seen.add(num); } return false;}8. Interview-Strategie: Komplexität kommunizieren
Nennen Sie nicht nur das Ergebnis. Erklären Sie das “Warum”:
- Nennen Sie die Komplexität sofort, nachdem Sie Ihre Lösung geschrieben haben.
- Schlüsseln Sie es auf: “Die äußere Schleife läuft -mal, und darin machen wir einen Set-Lookup, der ist, was zu einer Gesamtzeit von führt.”
- Erwähnen Sie den Speicher: “Da wir Elemente in einem Set speichern, beträgt die Speicherkomplexität im Worst-Case, wenn alle Elemente eindeutig sind.”
- Diskutieren Sie Abwägungen: “Ich habe Zeit gegenüber gewählt, da wir Eingaben mit hohem Verkehrsaufkommen erwarten. Wäre der Speicher jedoch extrem begrenzt, könnten wir eine vorherige Sortierung in Betracht ziehen ( Zeit, Speicher).“
9. Zusammenfassung
Bei Big O geht es nicht darum, ein Mathe-Genie zu sein; es geht darum, ein Optimierungs-Architekt zu sein. Suchen Sie immer nach Wegen, von zu oder zu gelangen, und seien Sie bereit, die Kosten des Speichers zu erklären, den Sie dafür einsetzen.