notes/school/di-ma/20181128_2-greedy-algorithmen.md

64 lines
1.6 KiB
Markdown
Raw Normal View History

2019-01-31 19:08:19 +01:00
---
title: Greedy-Algorithmen
date: 2018-11-28
---
Greedy-Algorithmen suchen immer lokal die beste Lösung. Die Lösungen müssen
nicht global optimal sein.
# Algorithmus (Greedy-Färbung)
**Eingabe**: $G=(V,E)$ ohne Einschränkung $V \in \{1,...,n\}$
i) setze $c(1) = 1$
i) `for ` $i \in \{2,...,n\}$ setze
$$
c(i) = \min\limits_{k\in \mathbb{N}} \{ k \neq c(v) | v \in \{1,...,i+1\}
\cap \Gamma(i) \}
$$
i) **Ausgabe**: $c : V \rightarrow \{ 1,..., \max \{c(i) | i \in V\} \}$
## Korrektheit
Da benachbarte Knoten unterschiedliche Farben haben, sit $c$ eine gültige
Färbung.
**Laufzeit**: $O(|V|)$ Iterationen.
Wie gut ist die Lösung des Greedy-Algorithmus?
Sei
$$
C = \max \{ c(i) | i \in \{1,...,n\} \}
$$
die Anzahl der Farben die der Greedy-Algorithmus braucht und
$$
A(G) = \max\limits_{v \in V} deg(v)
$$
dann gilt
$$
\chi(G) \leq C \leq \Delta(G) + 1
$$
da jeder Knoten maximal $\Delta(G)$ Nachbarn hat, ist die gewählte Farbe im
Schritt ii) immer kleiner gleich $\Delta(G) + 1$.
Die Güte der Lösung ist abhängig von der Reihenfolge, in welcher der
Greedy-Algorithmus die Knoten abarbeitet.
**Beispiel**: Betrachte bipartiten Graph mit $V_1 = \{u_1,...,u_n\}$ und
$V_2=\{v_1,...,v_n\}$ und $E = \{ \{u_i,v_j\} \mid i,j \in \{1,...,n\}, i \neq
j\}$
a) Reihenfolge $(u_1,u_2,...,u_n,v_1,v_2,...,v_n)$, dann gilt $C = \chi(G)$
a) Reihenfolge $(u_1,v_1,u_2,v_2,...,u_n,v_n)$, dann gilt $C=n=\Delta(G) + 1$
Man kann zeigen, dass es immer eine Reihenfolge gibt, so dass $C = \chi(G)$,
aber diese Reihenfolge kann man im Allgemeinen nicht effizient finden.