# OHNE Memoization - O(2^n) - KATASTROPHAL! 😱
def fib_slow(n):
if n <= 1:
return n
return fib_slow(n-1) + fib_slow(n-2)
# fib(40) = 102.334.155 Aufrufe, ~2 Sekunden
# MIT Memoization - O(n) - BLITZSCHNELL! 🚀
def fib_fast(n, memo={}):
if n in memo:
return memo[n] # Cached!
if n <= 1:
return n
memo[n] = fib_fast(n-1, memo) + fib_fast(n-2, memo)
return memo[n]
# fib(40) = 79 Aufrufe, <0.001 Sekunden!
# Bottom-Up Tabulation (noch besser - kein Rekursions-Overhead)
def fib_dp(n):
if n <= 1:
return n
dp = [0] * (n + 1)
dp[1] = 1
for i in range(2, n + 1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]
# fib(100) in Mikrosekunden!
memoize(), um bereits gelöste Pfade zu cachen. Sonst durchläufst du dieselben Wege wieder und wieder! Denke wie DP: Speichere Teillösungen! 🏴☠️╔══════════════════════════════════════════════════════════╗ ║ DYNAMIC PROGRAMMING - Memoization Visualisierung ║ ╚══════════════════════════════════════════════════════════╝ Fibonacci OHNE Memoization (Rekursionsbaum): fib(5) / \\ fib(4) fib(3) / \\ / \\ fib(3) fib(2) fib(2) fib(1) / \\ / \\ / \\ fib(2) fib(1) ... ← VIELE DUPLIKATE! Berechnungen: fib(3) wird 3x berechnet! fib(2) wird 5x berechnet! Total: 15 Aufrufe für fib(5) ┌────────────────────────────────────────┐ │ MIT Memoization - Cache-Tabelle: │ │ │ │ Berechnung: fib(5) │ │ Step 1: fib(0)=0, fib(1)=1 → Cache │ │ Step 2: fib(2)=1 → Cache │ │ Step 3: fib(3)=2 → Cache │ │ Step 4: fib(4)=3 → Cache │ │ Step 5: fib(5)=5 → Done! │ │ │ │ Cache Table: │ │ ┌────┬────┬────┬────┬────┬────┐ │ │ │ n │ 0 │ 1 │ 2 │ 3 │ 4 │ │ │ ├────┼────┼────┼────┼────┼────┤ │ │ │fib │0 │1 │1 │2 │3 │ │ │ └────┴────┴────┴────┴────┴────┘ │ │ │ │ Total: Nur 9 Aufrufe! (40% weniger) │ └────────────────────────────────────────┘ ⚡ Performance (fib(40)): Ohne Memo: 102.334.155 Aufrufe → 2 Sek Mit Memo: 79 Aufrufe → 0.001 Sek → 1.000.000x SCHNELLER!
💡 Tipp: Monster sind chaotisch sortiert - nutze memoize() um Reihenfolge zu ändern!
Unterstütze mein neues Projekt "Leyla's Code" mit einer Bitcoin-Spende!
💰
Bitcoin-Adresse:
Jede Spende hilft, Leyla's Code weiterzuentwickeln danke, Captain! 🏴☠️
Willkommen in der Welt der Sortier-Algorithmen! In Level 29 lernst du, wie Computer Daten effizient ordnen. Von Bubble Sort bis Quick Sort – verstehe die Unterschiede in Performance und Komplexität!
Ein Sortier-Algorithmus ordnet Daten in einer bestimmten Reihenfolge – aufsteigend oder absteigend. Die Wahl des richtigen Algorithmus kann den Unterschied zwischen Millisekunden und Stunden ausmachen!
Bubble Sort ist der simpelste Sortier-Algorithmus: Er vergleicht benachbarte Elemente und tauscht sie, wenn sie in der falschen Reihenfolge sind. Einfach, aber langsam bei großen Datenmengen!
Quick Sort ist deutlich effizienter: Er wählt ein "Pivot"-Element und teilt die Liste in zwei Hälften – kleinere und größere Werte. Dann wird das Verfahren rekursiv auf beide Hälften angewendet. Schnell und elegant!
🏆 Praxis-Tipp: Für kleine Datenmengen (unter 100 Elementen) ist die Wahl des Algorithmus egal. Bei 1 Million Elementen macht Quick Sort den Unterschied zwischen 2 Sekunden und 30 Minuten!
Meistere die Sortierung und werde zum Algorithmen-Experten! 🏴☠️