Interaktives Graphentheorie-Lernen
Interaktives Graphentheorie-Lernen
Guest User
Using app without sign in
Prüfer für chordale Graphen
Bestimmt, ob Graph chordal ist (jeder Zyklus ≥4 hat Sehne)
Wählen Sie einen Algorithmus und generieren Sie Schritte, um die Visualisierung zu beginnen
Ein Graph ist chordal, wenn jeder Zyklus aus vier oder mehr Knoten eine Sehne hat, also eine Kante, die zwei nicht aufeinanderfolgende Knoten des Zyklus verbindet. Chordale Graphen sind eine wohlartige Klasse, in der viele NP-schwere Probleme, darunter Färbung und maximale Clique, in polynomieller Zeit lösbar werden.
Chordalität wird mit Lexikografischer BFS (Lex-BFS) getestet, die die Knoten in O(V + E) ordnet. Ein Graph ist genau dann chordal, wenn die Umkehrung dieser Ordnung eine perfekte Eliminationsordnung ist, das heißt jeder Knoten bildet mit seinen späteren Nachbarn eine Clique, eine in linearer Zeit prüfbare Bedingung. Dieselbe Ordnung liefert dann greedy die optimale Färbung und die maximalen Cliquen.
Chordale Graphen ermöglichen effiziente Gauß-Elimination mit minimalem Fill-in für dünne Matrizen, exakte Inferenz in probabilistischen grafischen Modellen über Junction Trees, perfekte Phylogenie in der Computerbiologie und Registerzuteilung für strukturierte Programme. Sie sind ein Einstieg in die Theorie perfekter Graphen.
Chordalität direkt zu prüfen, indem man nach einem langen sehnenlosen Zyklus sucht, ist teuer. Der Standardweg ist indirekt: eine Kandidatenordnung für perfekte Elimination bestimmen und sie anschließend verifizieren.
// Schritt 1: Maximum-Cardinality-Search
gewicht[v] = 0 für alle v; ordnung = []
wiederhole V mal:
wähle das unnummerierte v mit größtem Gewicht
ordnung.voranstellen(v)
für jeden unnummerierten Nachbarn n von v: gewicht[n]++
// Schritt 2: prüfen, ob es eine perfekte Eliminationsordnung ist
für jedes v in ordnung an Position i:
spätere = Nachbarn von v, die nach i erscheinen
wenn spätere leer ist: weiter
w = der früheste Knoten in spätere
wenn ein u in spätere nicht zu w benachbart ist:
gib NICHT chordal zurück
gib chordal zurückEine perfekte Eliminationsordnung ist eine, in der jeder Knoten zusammen mit seinen späteren Nachbarn eine Clique bildet. Ein Graph ist genau dann chordal, wenn eine solche Ordnung existiert. Maximum-Cardinality-Search liefert stets eine, sofern der Graph chordal ist, der Verifikationsschritt ist also das, was aus einer heuristischen Ordnung einen Beweis macht, und er ist zugleich das, was das Scheitern erkennt, wenn keine solche Ordnung existiert.
Prüfe einen Vierer-Zyklus auf Chordalität, füge dann eine Sehne hinzu und prüfe erneut.
Beispielgraph: Zuerst der 4-Zyklus A-B, B-C, C-D, D-A. Dann derselbe Graph mit der zusätzlichen Sehne A-C.
Der reine 4-Zyklus ist nicht chordal; das Hinzufügen der einen Sehne A-C macht ihn chordal. Das ist die Definition greifbar gemacht: ein Graph ist chordal, wenn jeder Zyklus aus vier oder mehr Knoten eine Kante besitzt, die zwei nicht aufeinanderfolgende Knoten dieses Zyklus verbindet. Der 4-Zyklus ist das kleinstmögliche Gegenbeispiel, weshalb er der übliche Testfall ist.
Zeit: O(V + E) · Speicher: O(V + E)
Maximum-Cardinality-Search läuft in O(V + E), wenn man Knoten in Eimern nach Gewicht führt, sodass sowohl die Auswahl des Maximums als auch das Erhöhen der Nachbarn amortisiert konstant sind. Der Verifikationsdurchlauf betrachtet jeden Knoten einmal und jeden seiner späteren Nachbarn einmal, was insgesamt O(V + E) ergibt, sofern Adjazenzabfragen über eine Hashmenge konstant sind. Der gesamte Test ist also linear, was ein wirklich überraschendes Ergebnis ist: der naive Ansatz, Zyklen aufzuzählen und jeden auf eine Sehne zu prüfen, ist exponentiell, und selbst eine geschicktere zyklenbasierte Methode wäre weit schlechter. Lexikographische BFS ist eine Alternative zu MCS mit derselben Schranke.
Chordalität ist meist ein Türöffner: sobald ein Graph als chordal bekannt ist, werden mehrere NP-schwere Probleme auf ihm linear.
| Alternative | Vorzuziehen, wenn | Kosten |
|---|---|---|
| Maximum-Clique auf chordalem Graphen | Der Graph ist chordal. Allgemein NP-schwer, hier jedoch linear über die Eliminationsordnung. | O(V + E) |
| Graphfärbung auf chordalem Graphen | Chordale Graphen sind perfekt, gieriges Färben in umgekehrter Eliminationsordnung ist also exakt optimal. | O(V + E) |
| Baumzerlegung | Du willst geringe Baumweite ausnutzen. Chordale Graphen sind genau jene mit Baumweite gleich Maximalclique minus 1. | O(V + E), wenn chordal |
| Lexikographische BFS | Eine Alternative zu MCS für die Kandidatenordnung. Gleiche Komplexität, andere Konstanten. | O(V + E) |
Den ganzen Artikel lesen: Graph Algorithms and Their Complexity
Verwandte Algorithmen: Graphenfärbung, Maximale Clique, Breitensuche