Interaktives Graphentheorie-Lernen
Interaktives Graphentheorie-Lernen
Guest User
Using app without sign in
Interaktiver Tiefensuche-Visualisierer
Erforscht so weit wie möglich entlang jedes Zweigs, bevor es zurückgeht
Wählen Sie einen Algorithmus und generieren Sie Schritte, um die Visualisierung zu beginnen
Die Tiefensuche (DFS) ist ein Graph-Durchlaufalgorithmus, der jeden Ast so weit wie möglich verfolgt, bevor er zurückgeht. Ausgehend von einem Startknoten folgt sie einem Pfad bis zu einer Sackgasse, kehrt dann zur jüngsten Verzweigung zurück und probiert die nächste unerforschte Kante, meist per Rekursion oder mit einem expliziten Stapel.
DFS markiert den Startknoten als besucht und besucht dann rekursiv den ersten unbesuchten Nachbarn, wobei sie mit jedem Schritt tiefer geht. Hat ein Knoten keine unbesuchten Nachbarn mehr, wird die Rekursion abgewickelt und die Suche vom vorherigen Knoten fortgesetzt. Jeder Knoten und jede Kante wird genau einmal behandelt, was O(V + E) Zeit und O(V) Speicher ergibt. Die Reihenfolge von Eintritt und Austritt liefert Entdeckungs- und Abschlusszeiten, die viele abgeleitete Algorithmen nutzen.
DFS ist die Grundlage für topologische Sortierung, Zykluserkennung, starke Zusammenhangskomponenten, Artikulationspunkte, Brücken und Labyrintherzeugung. In der Praxis steckt sie hinter der Abhängigkeitsauflösung in Build-Werkzeugen, der Deadlock-Erkennung und Rätsellösern. In Interviews wird DFS ständig bei Backtracking, Inseln in Gittern und Pfadaufzählung eingesetzt.
DFS wird meist rekursiv geschrieben, doch die iterative Form macht den Stapel explizit und vermeidet einen Überlauf des Aufrufstapels bei tiefen Graphen. Beide erzeugen dieselbe Entdeckungsreihenfolge.
DFS(graph, quelle):
zeit = 0
besuche(quelle)
besuche(u):
besucht.hinzufügen(u)
entd[u] = ++zeit // Entdeckungszeit
für jeden Nachbarn v von u:
wenn v nicht in besucht:
vorgänger[v] = u
besuche(v)
fertig[u] = ++zeit // AbschlusszeitDie Entdeckungs- und Abschlusszeiten sind das eigentliche Ergebnis von DFS. Das Intervall [entd[u], fertig[u]] eines Nachfahren liegt strikt geschachtelt im Intervall seines Vorfahren, und diese Schachtelung ist die Grundlage von topologischer Sortierung, Zyklenerkennung, Tarjans starken Zusammenhangskomponenten, Artikulationspunkten und Brücken.
Führe DFS von A aus auf dem Graphen, den der Visualisierer standardmäßig lädt, und nimm die Nachbarn stets in alphabetischer Reihenfolge.
Beispielgraph: Ungerichtete Kanten A-B (2), A-C (3), B-C (1) und C-D (4). DFS ignoriert die Gewichte.
Die Durchlaufreihenfolge ist A, B, C, D. BFS besucht dieselben vier Knoten in derselben Reihenfolge, doch die Bäume unterscheiden sich: BFS baut einen flachen Baum mit A zu B, A zu C und C zu D, DFS dagegen die einzelne Kette A zu B zu C zu D. Die Rückkante C zu A kennzeichnet den Zyklus A-B-C-A, und die geschachtelten Intervalle A[1,8], B[2,7], C[3,6], D[4,5] zeigen die Rekursionstiefe unmittelbar.
Zeit: O(V + E) · Speicher: O(V)
Jeder Knoten wird genau einmal besucht, weil die Besuchtprüfung den rekursiven Aufruf absichert, und jede Kante wird von jedem Endpunkt einmal betrachtet, was 2E Prüfungen im ungerichteten und E im gerichteten Fall ergibt. Der Speicher besteht aus Besuchtmenge und Rekursionsstapel, beide O(V). Die Rekursionstiefe entspricht der Länge des längsten einfachen Weges, sodass eine rekursive Implementierung bei einem Pfadgraphen mit einer Million Knoten in den meisten Sprachen den Aufrufstapel überläuft und die Variante mit explizitem Stapel nötig wird.
Wähle DFS, wenn die Frage auf Struktur zielt. Wähle BFS, wenn sie auf Distanz zielt.
| Alternative | Vorzuziehen, wenn | Kosten |
|---|---|---|
| BFS | Du brauchst die wenigsten Schritte, eine Ebenenordnung, oder der Graph ist sehr tief und Antworten liegen vermutlich nahe der Quelle. | O(V + E) |
| Iterative Tiefensuche | Der Graph ist praktisch unendlich oder sehr tief, und du willst dennoch die flachste Lösung ohne den Speicherbedarf von BFS. | O(b^d) |
| Tarjans starke Zusammenhangskomponenten | Du willst gezielt die SCC eines gerichteten Graphen. Das ist DFS plus Low-Link-Buchführung in einem Durchlauf. | O(V + E) |
| Union-Find | Du brauchst nur Zusammenhangskomponenten in einem ungerichteten Graphen und die Kanten treffen nach und nach ein. | nahezu O(E) |
Den ganzen Artikel lesen: BFS vs DFS: When to Use Each Traversal
Verwandte Algorithmen: Breitensuche, Topologische Sortierung, Zykluserkennung