Interaktives Graphentheorie-Lernen
Interaktives Graphentheorie-Lernen
Guest User
Using app without sign in
Finder für maximale Cliquen
Findet größten vollständigen Teilgraphen (alle Knoten verbunden)
Wählen Sie einen Algorithmus und generieren Sie Schritte, um die Visualisierung zu beginnen
Eine Clique ist eine Knotenmenge, in der alle paarweise verbunden sind. Eine maximale Clique lässt sich nicht durch Hinzufügen eines weiteren Knotens erweitern, und das Finden aller maximalen Cliquen oder der einzelnen größten ist ein grundlegendes NP-schweres Problem der Netzwerkanalyse.
Der Algorithmus von Bron-Kerbosch zählt alle maximalen Cliquen durch rekursives Backtracking über drei Mengen auf: die aktuelle Clique R, Kandidaten P, die mit ganz R verbunden sind, und ausgeschlossene, bereits abgedeckte Knoten X. Die Wahl eines guten Pivots beschneidet die Rekursion drastisch, und das Verarbeiten der Knoten in Degeneriertheitsreihenfolge ergibt die beste bekannte Aufzählungsschranke O(3 hoch n/3), passend zur maximal möglichen Zahl maximaler Cliquen.
Cliquenerkennung findet eng verbundene Gemeinschaften in sozialen Netzwerken, Protein-Interaktionskomplexe in der Biologie, korrelierte Anlagen im Finanzwesen und gemeinsam gekaufte Produktgruppen in Empfehlungssystemen. Cliquenprobleme sind auch das Standardmittel, um NP-Vollständigkeits-Reduktionen zu lehren.
Bron-Kerbosch arbeitet mit drei Mengen: R ist die bisher gebaute Clique, P enthält die Kandidaten, die sie noch erweitern könnten, und X enthält die bereits probierten Knoten. Eine Clique ist genau dann maximal, wenn P und X beide leer sind.
BronKerbosch(R, P, X):
wenn P und X beide leer sind:
melde R als maximale Clique
return
für jeden Knoten v in P:
BronKerbosch(R + {v},
P geschnitten Nachbarn(v),
X geschnitten Nachbarn(v))
P = P - {v}
X = X + {v}
// Mit Pivot: wähle einen Pivot u aus P vereinigt X und
// verzweige nur über die v in P, die KEINE Nachbarn von u sindX ist der Teil, den man gern weglässt, und ohne ihn meldet der Algorithmus Cliquen, die nicht maximal sind. Sobald ein Knoten auf dieser Ebene bereits erkundet wurde, wandert er nach X, sodass jede Clique, die ihn hätte enthalten können, als nicht maximal verworfen wird. Die Pivot-Verfeinerung senkt anschließend den Verzweigungsgrad erheblich: jede maximale Clique muss den Pivot oder einen seiner Nichtnachbarn enthalten, über den Rest zu verzweigen ist also verlorene Arbeit.
Zähle alle maximalen Cliquen eines Graphen mit sechs Kanten auf, der zwei überlappende Dreiecke und eine hängende Kante enthält.
Beispielgraph: Ungerichtete Kanten A-B, A-C, B-C, B-D, C-D und D-E.
Die maximalen Cliquen sind {A, B, C}, {B, C, D} und {D, E}. Die maximum Clique, also die größte, hat Größe 3, und davon gibt es zwei. Beachte, dass maximal und maximum verschieden sind: {D, E} ist maximal, weil sich nichts anfügen lässt, aber weit von maximum entfernt. Beachte außerdem, dass B und C in je zwei maximalen Cliquen vorkommen, was normal ist und erklärt, warum die Zahl maximaler Cliquen die Knotenzahl deutlich übersteigen kann.
Zeit: O(3^(V/3)) · Speicher: O(V^2)
Die Schranke stammt aus dem Satz von Moon und Moser: ein Graph mit V Knoten kann höchstens 3 hoch V/3 maximale Cliquen besitzen, und diese Schranke ist scharf, erreicht von einem vollständig multipartiten Graphen aus V/3 Dreiecken. Da der Algorithmus mindestens jede davon ausgeben muss, kann kein Aufzählungsalgorithmus das im schlechtesten Fall unterbieten, und Bron-Kerbosch mit Pivot erreicht sie. Das lohnt sich zu verinnerlichen: der Algorithmus ist optimal, doch das Problem selbst ist exponentiell. Nur die größte Clique zu finden ist NP-schwer, und selbst sie innerhalb eines vernünftigen Faktors zu approximieren ist schwer. In der Praxis machen Pivot und eine Degeneriertheitsordnung dünne reale Graphen mit Zehntausenden Knoten handhabbar, weil dünne Graphen weit weniger maximale Cliquen haben als der schlechteste Fall.
Kläre zuerst, ob du alle maximalen Cliquen willst oder nur die größte, denn das sind verschiedene Probleme mit verschiedenen Werkzeugen.
| Alternative | Vorzuziehen, wenn | Kosten |
|---|---|---|
| Bron-Kerbosch mit Pivot | Du willst alle maximalen Cliquen. Die Standardwahl und im schlechtesten Fall optimal. | O(3^(V/3)) |
| Variante mit Degeneriertheitsordnung | Dünne reale Graphen. Eine Ordnung nach Degeneriertheit d liefert eine weit bessere praktische Schranke. | O(d·V·3^(d/3)) |
| Branch and Bound für Maximum-Clique | Du brauchst nur die einzelne größte Clique, nicht die vollständige Aufzählung. Färbungsschranken schneiden stark ab. | exponentiell, praktisch weit schneller |
| Komplement plus unabhängige Menge | Dein Problem dreht sich eigentlich um paarweise nicht benachbarte Knoten. Eine Clique in G ist eine unabhängige Menge im Komplement von G. | äquivalent |
| Dreiecksaufzählung | Dich interessieren nur Cliquen der Größe 3, ein deutlich einfacherer Sonderfall. | O(E^1.5) |
Den ganzen Artikel lesen: Applications of Graph Theory in the Real World
Verwandte Algorithmen: Graphenfärbung, Chordalitätsprüfung, Bipartit-Prüfung