Interaktives Graphentheorie-Lernen
Interaktives Graphentheorie-Lernen
Guest User
Using app without sign in
Löser für Graphenfärbung und chromatische Zahl
Färbt Knoten so, dass keine benachbarten Knoten dieselbe Farbe haben
Wählen Sie einen Algorithmus und generieren Sie Schritte, um die Visualisierung zu beginnen
Die Graphfärbung weist Knoten Farben zu, sodass keine zwei benachbarten Knoten dieselbe Farbe teilen, und zwar mit möglichst wenigen Farben. Die minimal nötige Zahl ist die chromatische Zahl, und ihre Berechnung ist für allgemeine Graphen NP-schwer.
Der Greedy-Algorithmus ordnet die Knoten und gibt jedem die kleinste Farbe, die keiner seiner bereits gefärbten Nachbarn nutzt, was höchstens eine Farbe mehr als der maximale Grad garantiert. Ordnungen wie Welsh-Powell (nach absteigendem Grad) oder DSatur (nach Sättigung, der Zahl verschiedener Nachbarfarben) nutzen in der Praxis oft weit weniger Farben. Exakte Färbung verwendet Backtracking mit Abschneiden, nur für kleine Graphen machbar.
Färbung plant Prüfungen, sodass kein Studierender zwei zugleich hat, weist CPU-Register in Compilern zu, verteilt Funkfrequenzen ohne Interferenz und färbt Karten, sodass sich benachbarte Regionen unterscheiden. Der Vierfarbensatz für planare Graphen ist eines der berühmtesten Ergebnisse der Mathematik. Der Bipartit-Test ist genau die 2-Färbbarkeit.
Gierige Färbung besteht aus drei Zeilen und liefert stets eine gültige Färbung. Was sie nicht zwangsläufig liefert, ist eine minimale, und die Knotenreihenfolge entscheidet, wie nah sie herankommt.
GierigeFärbung(graph, reihenfolge):
farbe = {}
für jeden Knoten v in reihenfolge:
belegt = { farbe[n] : n Nachbar von v, gefärbt }
c = kleinste positive ganze Zahl nicht in belegt
farbe[v] = c
gib farbe zurück
// Welsh-Powell: nach absteigendem Grad sortieren
// DSatur: wiederholt den ungefärbten Knoten mit den meisten
// verschieden gefärbten Nachbarn (Sättigung) wählen,
// bei Gleichstand nach Grad entscheidenDie gierige Färbung braucht nie mehr als Maximalgrad plus eins Farben, denn wenn du einen Knoten erreichst, hat er höchstens so viele Nachbarn und damit höchstens so viele verbotene Farben. Das ist eine echte Garantie, kann aber weit von der wahren chromatischen Zahl entfernt liegen. DSatur ist die praktische Verbesserung: den am stärksten eingeschränkten Knoten als nächsten zu wählen ist genau die Heuristik, die verhindert, dass du dich selbst in die Enge treibst.
Färbe einen Fünferzyklus gierig in alphabetischer Reihenfolge und vergleiche das Ergebnis dann mit der wahren chromatischen Zahl.
Beispielgraph: Ungerichteter Zyklus A-B, B-C, C-D, D-E und E-A.
Die Färbung lautet A 1, B 2, C 1, D 2, E 3 und benutzt drei Farben, und eine erschöpfende Prüfung bestätigt, dass die chromatische Zahl eines Fünferzyklus tatsächlich 3 beträgt. Gierig war hier also optimal. Der Grund, warum überhaupt drei nötig sind, ist die ungerade Länge des Zyklus: Farben müssen entlang eines Zyklus alternieren, und ein ungerader Zyklus führt dich zum Start zurück, wo du eine andere Farbe als die bereits vergebene bräuchtest. Jeder gerade Zyklus kommt mit 2 aus.
Zeit: O(V + E) gierig, exakt NP-schwer · Speicher: O(V)
Die gierige Färbung betrachtet jeden Knoten einmal und prüft jede Kante zweimal, einmal von jedem Endpunkt, ist also O(V + E) mit O(V) Speicher für das Farbfeld. Dieser Aufwand erkauft eine gültige Färbung mit höchstens Maximalgrad plus eins Farben, nie ein garantiertes Minimum. Die tatsächliche chromatische Zahl zu berechnen ist NP-schwer, und sie auch nur innerhalb eines Faktors V hoch 1 minus Epsilon zu approximieren ist NP-schwer, was ungewöhnlich stark ist: für die meisten Probleme existiert irgendeine brauchbare Approximation, für die Färbung im Wesentlichen keine. Die 2-Färbbarkeit ist die Ausnahme und ist leicht, denn sie ist genau der Bipartitheitstest mit O(V + E). Die 3-Färbbarkeit zu entscheiden ist bereits NP-vollständig.
Wähle danach, wie viele Farben du erwartest und ob du das wahre Minimum brauchst.
| Alternative | Vorzuziehen, wenn | Kosten |
|---|---|---|
| Bipartitheitsprüfung | Du willst nur wissen, ob 2 Farben genügen. Ein anderes und weit leichteres Problem. | O(V + E) |
| DSatur | Die praktische Voreinstellung. Wählt den am stärksten gesättigten Knoten und ist auf realen Graphen oft optimal oder nahe daran. | O(V^2) |
| Welsh-Powell | Du willst mit fast keinem Zusatzcode etwas Besseres als eine beliebige Reihenfolge. Sortiert nach absteigendem Grad. | O(V^2) |
| Exaktes Branch and Bound | Du brauchst wirklich die chromatische Zahl und der Graph ist klein. | exponentiell |
| Maximale Clique | Du willst eine untere Schranke. Eine Clique der Größe k erzwingt mindestens k Farben. | O(3^(V/3)) |
Den ganzen Artikel lesen: The Graph Coloring Problem
Verwandte Algorithmen: Bipartit-Prüfung, Maximale Clique, Chordalitätsprüfung