David Schirrmeister 289623ea5a update
2025-04-15 18:44:27 +02:00

2.9 KiB
Raw Blame History

Einleitung

image_590.png

Das Ampelproblem

image_553.png

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}}

image_588.png

Formalisierung des algorithmischen Vorgehens

  1. Verträglichkeitsgraphen erstellen (G = (V,E))
  2. finde eine größte Clique C_1 in V
  3. Entferne aus G alle Knoten aus C_1 und Kanten Adjazent zu C_1
    • V ← V \ C_1
    • E ← E \ {$e ∈ E | e ∩ C_1 \neq ∅$}
  4. finde eine größte Clique C_2 in V
  5. ...

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.

  1. Verträglichkeitsgraphen erstellen (G = (V,E))
  2. finde eine größte Clique C_1 in V
  3. 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:
    • (a) v ∈ allen größten Cliquen → k_{-v} = k - 1
    • (b) v !∈ allen größten Cliquen → k_{-v} = k
      image_589.png

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)

  1. Verträglichkeitsgraphen erstellen (G = (V,E))
  2. Cliquen finden
  3. Elemente der ersten Clique zählen
  4. falls Elemente = k → Abbruch sonst zur nächsten