# BFS - Nutzt QUEUE (FIFO) - "Breite zuerst"
from collections import deque
def bfs(graph, start):
visited = set()
queue = deque([start])
while queue:
node = queue.popleft() # Erste raus (FIFO)
if node not in visited:
visited.add(node)
queue.extend(graph[node]) # Alle Nachbarn hinzufügen
return visited
# DFS - Nutzt STACK (LIFO) - "Tiefe zuerst"
def dfs(graph, start, visited=None):
if visited is None:
visited = set()
visited.add(start)
for neighbor in graph[start]:
if neighbor not in visited:
dfs(graph, neighbor, visited) # Rekursion = impliziter Stack
return visited
# Graph-Repräsentation (Adjacency List)
graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F'],
'D': [], 'E': [], 'F': []
}
# BFS: A → B, C → D, E, F (Level für Level)
# DFS: A → B → D → E → C → F (Tiefe zuerst)
mark_visited(), um bereits besuchte Knoten zu markieren – sonst läufst du im Kreis! BFS findet den kürzesten Weg, DFS ist speicher-effizienter. Wähle weise!╔══════════════════════════════════════════════════════════╗ ║ BFS vs DFS - Graph Traversal Visualisierung ║ ╚══════════════════════════════════════════════════════════╝ Graph-Struktur: A (Start) / \\ B C / \\ | D E F ┌────────── BFS (Queue: FIFO) ───────────┐ │ Level 0: [A] │ │ Level 1: [B, C] ← Nachbarn von A │ │ Level 2: [D, E, F] ← Nachbarn v. B,C│ │ │ │ Queue: [A] → [B,C] → [C,D,E] │ │ → [D,E,F] → [E,F] → [F] → [] │ │ │ │ Besuchs-Reihenfolge: A → B → C → D → E → F │ │ ✓ Findet KÜRZESTEN Weg! │ └─────────────────────────────────────────┘ ┌────────── DFS (Stack: LIFO) ───────────┐ │ Start: A → gehe zu B (erster Nachbar) │ │ Von B → gehe zu D (erster Nachbar) │ │ D hat keine Nachbarn → backtrack zu B │ │ Von B → gehe zu E (nächster Nachbar) │ │ E hat keine Nachbarn → backtrack zu A │ │ Von A → gehe zu C (nächster Nachbar) │ │ Von C → gehe zu F → fertig! │ │ │ │ Stack: [A] → [A,B] → [A,B,D] │ │ → [A,B] → [A,B,E] → [A] │ │ → [A,C] → [A,C,F] → [] │ │ │ │ Besuchs-Reihenfolge: A → B → D → E → C → F │ │ ✓ Speicher-effizienter bei tiefen Graphen! │ └─────────────────────────────────────────┘ ⚡ Vergleich: BFS: O(V + E) Zeit, O(V) Space (Queue groß!) DFS: O(V + E) Zeit, O(h) Space (h = Höhe) (V = Vertices/Knoten, E = Edges/Kanten)
💡 Tipp: Monster sind chaotisch sortiert - nutze mark_visited() 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 des Graph Traversal! In Level 28 lernst du, wie Computer Graphen effizient durchsuchen. Von BFS bis DFS – verstehe die Unterschiede in Performance und Komplexität!
Ein Sortier-Algorithmus durchsucht Datenstrukturen wie Labyrinthe – aufsteigend oder absteigend. Die Wahl des richtigen Algorithmus kann den Unterschied zwischen Millisekunden und Stunden ausmachen!
Bubble Sort ist der BFS-Algorithmus: Er durchsucht Level für Level und tauscht sie, wenn sie in der falschen Reihenfolge sind. Einfach, aber langsam bei großen Datenmengen!
Quick Sort ist deutlich effizienter: Er geht so tief wie möglich 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 Graph Traversal und werde zum Algorithmen-Experten! 🏴☠️