2.9 KiB
Einleitung
Das Ampelproblem
Lösungsansatz
- ungerichteter Graph
G = (V, E)
- V = endliche Knotenmenge
- E = endliche Kantenmenge
- wichtige Eigenschaft: si, sj verträglich oder nicht
Graph G=(V, E) für kommende Abbildung:
V = {s1, s2, s3, s4, s5, s6},
E = {{s1, s4}, {s1, s5}, {s2, s4}, {s2, s5}, {s3, s6}, {s4, s5}}
Formalisierung des algorithmischen Vorgehens
- Verträglichkeitsgraphen erstellen (
G = (V,E)
) - finde eine größte Clique
C_1
in V - Entferne aus G alle Knoten aus
C_1
und Kanten Adjazent zuC_1
V ← V
\C_1
E ← E
\ {$e ∈ E | e ∩ C_1 \neq ∅$}
- finde eine größte Clique
C_2
in V - ...
Clique C
nicht-leere Teilmenge C \subseteq V
, wenn zwei verschiedene Knoten in C paarweise durch eine Kante aus E verbunden sind
Es gilt:
{u,v} \in E
für alle u,v \in C
mit u \ne v
per Definition ist auch jede einelementige Teilmenge C \subseteq V
eine Clique
Größe einer Clique:
|C|
Maximum Clique-Size
Eingabe: Graph V = (V, E)
Ausgabe: Größe einer größten Clique C von G
Theorem 1.1
Algorithmus A löse MaximumClique. Dann existiert Algorithmus B mit ~ gleicher Laufzeit der MaximumCliqueSize löst.
- Verträglichkeitsgraphen erstellen (
G = (V,E)
) - finde eine größte Clique
C_1
in V - zähle Elemente der Clique
Theorem 1.2
Algorithmus A löse MaximusCliqueSize. Dann existiert Algorithmus B mit ähnlicher Laufzeit der MaximumClique löst.
N(v) = \{n ∈ V | \{n,v\} ∈ E\}
- alle Knoten, die nix mit dem zu tun haben werden entfernt
\begin{array}{l}
\text{A}(G = (V, E)) \\
1.\ \text{Wähle } v \in V \text{ mit kleinster ID} \\
2.\ \text{Berechne } k = B(G) \\
3.\ \text{Berechne } k_{-v} = B(G - v) \\
4.\ \text{Falls } k_{-v} < k: \\
\quad a.\ c = A(G - v - \overline{N(v)}) \\
\quad b.\ \text{Gib } \{v\} \text{u zurück} \\
5.\ \text{Sonst:} \\
\quad a.\ c = A(G - v) \\
\quad b.\ \text{Gib } c \text{ zurück}
\end{array}
Zentrale Beobachtung:
- Für G = (V, E) und v ∈ V sei G - v = (V\v,{e ∈ E | v !∈ e}).
- Sei k die Größe einer Clique in G und
k_{-v}
die Größe einer größten Clique in G-v. - Dann gilt:
MaximumCliqueDec
Eingabe: Graph V = (V, E) und k ∈ Ν
Ausgabe: gibt es eine Clique C der Größe k in G?
Theorem 1.3
Algorithmus A löse MaximumCliqueDec. Dann existiert ähnlicher Algorithmus B mit ähnlicher Laufzeit, der MaximumCliqueSize löst.
B(G, k) für G = (V, E)
- Verträglichkeitsgraphen erstellen (
G = (V,E)
) - Cliquen finden
- Elemente der ersten Clique zählen
- falls Elemente = k → Abbruch sonst zur nächsten