Interaktives Graphentheorie-Lernen
Interaktives Graphentheorie-Lernen
Guest User
Using app without sign in
Finder für Schnittknoten
Findet Knoten, deren Entfernung die Anzahl zusammenhängender Komponenten erhöht
Wählen Sie einen Algorithmus und generieren Sie Schritte, um die Visualisierung zu beginnen
Ein Artikulationspunkt (oder Schnittknoten) ist ein Knoten, dessen Entfernung den Graphen trennt oder die Zahl seiner Zusammenhangskomponenten erhöht. Das Finden von Artikulationspunkten deckt einzelne Ausfallpunkte in einem Netz auf.
Die DFS-basierte Methode von Tarjan besucht jeden Knoten einmal und verfolgt dessen Entdeckungszeit und Low-Link-Wert, den frühesten aus seinem Teilbaum über Rückkanten erreichbaren Knoten. Ein Nicht-Wurzel-Knoten v ist ein Artikulationspunkt, wenn ein Kind-Teilbaum nicht über v hinausreicht, also low[Kind] >= disc[v]. Die DFS-Wurzel ist ein Artikulationspunkt, wenn sie zwei oder mehr DFS-Kinder hat. Die gesamte Analyse läuft in O(V + E).
Artikulationspunkte legen kritische Router in Kommunikationsnetzen, Schlüsselkreuzungen in Straßensystemen, verwundbare Server in verteilter Infrastruktur und einflussreiche Vermittler in sozialen Netzwerken offen. Die Zuverlässigkeitstechnik nutzt sie, um Redundanz zu priorisieren. Sie erscheinen auch in schwereren Interviewrunden zusammen mit Brücken.
Eine einzige Tiefensuche und zwei Zahlen je Knoten. Die Entdeckungszeit sagt, wann der Knoten zuerst gesehen wurde; der Low-Link-Wert sagt, welchen frühesten Knoten sein Teilbaum über eine Rückkante erreichen kann.
dfs(u, vorgänger):
entd[u] = low[u] = ++zeit
kinder = 0
für jeden Nachbarn v von u:
wenn v == vorgänger: weiter
wenn v bereits besucht:
low[u] = min(low[u], entd[v]) // Rückkante
sonst:
kinder++
dfs(v, u)
low[u] = min(low[u], low[v])
wenn vorgänger != KEINER und low[v] >= entd[u]:
markiere u als Artikulationspunkt
wenn vorgänger == KEINER und kinder > 1:
markiere u als Artikulationspunkt // WurzelregelDie Bedingung low[v] >= entd[u] besagt, dass der im Kind v wurzelnde Teilbaum keine Rückkante besitzt, die über u hinausreicht. Jeder Weg aus diesem Teilbaum heraus führt also durch u, und u zu löschen schneidet ihn ab. Die Wurzel ist ein Sonderfall, weil sie keinen Vorgänger hat, von dem sie getrennt werden könnte: die Wurzel ist genau dann ein Artikulationspunkt, wenn sie zwei oder mehr DFS-Kinder hat, denn diese Teilbäume können einander nur über sie erreichen.
Führe die Tiefensuche von A aus auf einem Graphen aus, der aus einem Dreieck mit einem zweiknotigen Anhängsel besteht, und nimm die Nachbarn alphabetisch.
Beispielgraph: Ungerichtete Kanten A-B, B-C und C-A bilden ein Dreieck, dazu C-D und D-E als Anhängsel.
Die Artikulationspunkte sind C und D. Das Dreieck A-B-C liefert unter A und B keinen, weil jeder Knoten eines Zyklus eine Ausweichroute besitzt, während im Anhängsel C-D-E jeder innere Knoten kritisch ist. Dieser Gegensatz ist die eigentliche Intuition: Artikulationspunkte leben auf Ketten, nicht innerhalb von Zyklen.
Zeit: O(V + E) · Speicher: O(V)
Das ist eine einzige Tiefensuche mit konstantem Zusatzaufwand je Kante, sie kostet also genauso viel wie der Durchlauf selbst. Jeder Knoten wird einmal besucht und jede Kante zweimal betrachtet, einmal von jedem Endpunkt. Der zusätzliche Zustand besteht aus zwei ganzen Zahlen je Knoten, Entdeckungszeit und Low-Link, plus dem Rekursionsstapel, alles O(V). Die naive Alternative, jeden Knoten der Reihe nach zu entfernen und den Zusammenhang zu prüfen, kostet O(V mal (V + E)); die Low-Link-Methode verwandelt also eine quadratische Prüfung in einer einzigen Passe in eine lineare. Bei einem Graphen mit 10.000 Knoten und 30.000 Kanten liegt der Unterschied bei etwa vier Größenordnungen.
Artikulationspunkte, Brücken und Zweifachzusammenhangskomponenten entspringen alle derselben Tiefensuche. Welche du brauchst, hängt davon ab, ob das Anfällige ein Knoten oder eine Kante ist.
| Alternative | Vorzuziehen, wenn | Kosten |
|---|---|---|
| Brückensuche | Das Kritische ist eine Verbindung statt eines Knotens. Dieselbe DFS mit dem strikten Test low[v] > entd[u]. | O(V + E) |
| Zweifachzusammenhangskomponenten | Du willst die maximalen Blöcke, die das Entfernen eines beliebigen Knotens überstehen, nicht nur die Schnittknoten selbst. | O(V + E) |
| Prüfung auf 2-Knoten-Zusammenhang | Du brauchst nur ein Ja oder Nein, ob ein einzelner Ausfall den Graphen trennen kann. | O(V + E) |
| Tarjan SCC | Der Graph ist gerichtet. Artikulationspunkte sind nur für ungerichtete Graphen definiert. | O(V + E) |
Den ganzen Artikel lesen: Applications of Graph Theory in the Real World
Verwandte Algorithmen: Brückenfindung, Tiefensuche, Tarjan SCC-Algorithmus