From 537045dd1e070356706cdc46eb6bec850b72c873 Mon Sep 17 00:00:00 2001 From: Valentin Brandl Date: Thu, 31 Jan 2019 19:08:19 +0100 Subject: [PATCH] Add dima notes --- school/di-ma/20181009_2-kombinatorik.md | 2 +- school/di-ma/20181128_1-knotenfaerbung.md | 120 +++++++++++++++++- school/di-ma/20181128_2-greedy-algorithmen.md | 63 +++++++++ school/di-ma/20181204_1-kantenfaerbung.dot | 18 +++ school/di-ma/20181204_1-kantenfaerbung.md | 63 +++++++++ school/di-ma/20181204_2-matching.dot | 29 +++++ school/di-ma/20181204_2-matching.md | 76 +++++++++++ school/di-ma/index.md | 3 + 8 files changed, 372 insertions(+), 2 deletions(-) create mode 100644 school/di-ma/20181128_2-greedy-algorithmen.md create mode 100644 school/di-ma/20181204_1-kantenfaerbung.dot create mode 100644 school/di-ma/20181204_1-kantenfaerbung.md create mode 100644 school/di-ma/20181204_2-matching.dot create mode 100644 school/di-ma/20181204_2-matching.md diff --git a/school/di-ma/20181009_2-kombinatorik.md b/school/di-ma/20181009_2-kombinatorik.md index 3513c3d..26f77e0 100644 --- a/school/di-ma/20181009_2-kombinatorik.md +++ b/school/di-ma/20181009_2-kombinatorik.md @@ -145,7 +145,7 @@ $n! = n\cdot(n-1)\cdot...\cdot2\cdot1$ Möglichkeiten **Bemerkung:** Es gilt $$ -n^{\underline{k}} = \frac{n!}{(n-1)!} +n^{\underline{k}} = \frac{n!}{(n-k)!} $$ ### Fall C diff --git a/school/di-ma/20181128_1-knotenfaerbung.md b/school/di-ma/20181128_1-knotenfaerbung.md index 6abb9cd..e3709a5 100644 --- a/school/di-ma/20181128_1-knotenfaerbung.md +++ b/school/di-ma/20181128_1-knotenfaerbung.md @@ -66,7 +66,7 @@ a) Es gilt $\chi(K_n) = n$ a) Kreise $C_n$ i) falls $n$ gerade ist $\chi(C_n) = 2$ - + i) falls $n$ ungerade ist $\chi(C_n) = 3$ a) Bipartite Graphen: Bipartiter Graph $G=(V,E)$. Es gibt eine Partition von @@ -78,3 +78,121 @@ sogar: # Satz Ein Graph $G=(V,E)$ hat $\chi(G) = 2$ $\Leftrightarrow$ $G$ ist bipratit. + + +## Beweis + +"$\Leftarrow$" siehe oben + +"$\Rightarrow$" Sei $G=(V,E)$ ein Graph mit $\chi(G) = 2$. Das heißt $\exists c +: V \rightarrow \{1,2\}$ mit $\forall \{u,v\} \in E: c(u) \neq c(v)$. + +Setze $V_1 = \{v \in V | c(v) = 1 \}$ und $V_2 = \{v \in V | c(v) = 2 \}$. +Damit gilt $V = V_1 \biguplus V_2$ und $E \subseteq \{ \{u,v\} | u \in V_1, v +\in V_2 \}$ denn es gibt keine Katen zu Knoten gleicher Farbe. + + +Es gilt weiterhin + +# Satz + +Sei $G=(V,E)$ Graph, dann gilt $\chi(G) = 2$ genau dann, wenn $G$ keinen Kreis +ungerader Länge enthält. + +## Beweis + +"$\Rightarrow$" Sei $G$ ein Graph, der einen Kreis ungerader Länge enthält. Für +diesen Teilgraph braucht man schon 3 Farben. Damit kann $G$ nicht 2-färbbar +sein. + +"$\Leftarrow$" Sei $G$ ein Graph der keinen Kreis ungerader Länge enthäöt. Wir +nehmen ohne Einschränkung an, dass $G$ zusammenhängend ist. Wähle $s\in V$ +beliebig und führe Breitensuche auf $G$ mit Startknoten $s$ aus. Liefert +Spannbaum $T = \{ \{v,pred[v]\} | v \in V \setminus \{s\} \}$ und +Abstandsvektor $d[v]$. + +Wir setzen $c: V \rightarrow \{1,2\}$ mit $c(v) = \begin{cases} +1 & 2 \mid d[v] \\ +2 & 2 \nmid d[v] +\end{cases}$. Dies liefert die Färbung auf $T$. + +Die weiteren Kanten von $G$ schließen Kreise gerader Länge. Deshalb haben +Endknoten immer unterschiedliche Farben. + +$$ +\tag*{$\Box$} +$$ + + +$$ +\chi(G) = 2 \Leftrightarrow G\text{ ist bipartit} \Leftrightarrow G \text{ +enthält keinen Kreis ungerader Länge} +$$ + + +# Satz + +Sei $G=(V,E)$ ein planarer Graph. Dann gilt $\chi(G) \leq 6$. + +## Beweis + +(per Induktion) + +Die Aussage ist trivial, falls $|V| \leq 6$. + +**Induktionsschritt**: Sei nun $G=(V,E)$ planar mit $|V| \geq 6$. Da $G$ +planar, $\exists v \in V : deg(v) \leq 5$. + +Betrachte $G' = G \setminus \{v\}$. Nach Induktionsanfang gibt es eine Färbung +für $G'$ mit maximal 6 Farben. Das heißt + +$$ +\exists c' : V \setminus \{v\} \rightarrow \{1,...,6\} \text{ so dass} \\ +\forall \{u,w\} \in E, u,w \neq v : c'(u) \neq c'(v) +$$ + +Wir konstruieren + +$$ +c: V \rightarrow \{1,...,6\} \text{ mit} \\ +c(u) = \begin{cases} +c'(u) & u \neq v \\ +\min \{\{1,...,6\} \setminus \{c'(x)\} | x \in \Gamma(v)\} & u = v +\end{cases} +$$ + +Da $|\Gamma(v)| \leq 5$ ist $c(v) \in \{1,...,6\}$ wohl definiert und $c$ ist +Färbung von $G$. + +$$ +\tag*{$\Box$} +$$ + + +Mit ein wenig mehr Aufwand kann man zeigen + +$$ +G \text{ planar} \Rightarrow \chi(G) \leq 5 +$$ + + +Es gilt sogar + +# Satz + +Sei $G=(V,E)$ planar, dann gilt $\chi(G) \leq 4$ + + +## Bemerkungen + +i) Computergestützter Beweis + +i) Es gibt einen Algorithmus, der für planare Graphen eine 4-Färbung in +Laufzeit $O(|V|^2)$ berechnet + +i) Für allgemeine Graphen ist die Frage $\chi(G) \stackrel{?}{\le} 3$ nicht +effizient zu entscheiden (d.h. wir kennen keinen Algorithmus mit polynomieller +Laufzeit) + + +Deshalb: effiziente Algorithmen, die eine nicht-optimale Lösung finden diff --git a/school/di-ma/20181128_2-greedy-algorithmen.md b/school/di-ma/20181128_2-greedy-algorithmen.md new file mode 100644 index 0000000..65991d4 --- /dev/null +++ b/school/di-ma/20181128_2-greedy-algorithmen.md @@ -0,0 +1,63 @@ +--- +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. diff --git a/school/di-ma/20181204_1-kantenfaerbung.dot b/school/di-ma/20181204_1-kantenfaerbung.dot new file mode 100644 index 0000000..115dcad --- /dev/null +++ b/school/di-ma/20181204_1-kantenfaerbung.dot @@ -0,0 +1,18 @@ +graph g { + splines=false; + node [ shape="circle" ]; + + { + rank="same"; + A; B; + } + { + rank="same"; + C; D; + } + + A -- B [ label="1" ]; + A -- C [ label="2" ]; + A -- D [ label="3" ]; + B -- D [ label="2" ]; +} diff --git a/school/di-ma/20181204_1-kantenfaerbung.md b/school/di-ma/20181204_1-kantenfaerbung.md new file mode 100644 index 0000000..e0332f6 --- /dev/null +++ b/school/di-ma/20181204_1-kantenfaerbung.md @@ -0,0 +1,63 @@ +--- +title: Kantenfärbung +date: 2018-12-04 +--- + +**Beispiel**: $n$ Teams $\widehat{=}$ Knoten, $m$ Partien zwischen je 2 Teams +$\widehat{=} Kanten$ + +![Graph](20181204_1-kantenfaerbung.png) + +Festlegen der Termine, an denen die SPiele stattfinden (Termine haben Nummern +$1,...,k$). + +**Frage**: Wie viele Termine braucht man? + +**Bedingung**: Kein Team kann an einem Termin 2 Spiele spielen + + +# Definition (Kantenfärbung) + +Sei $G=(V,E)$ ein Graph. + +i) Eine Kantenfärbung ist eine Abbildung + $$ + c : E \rightarrow \{1,...,k\} + $$ + mit der Eigenschaft + $$ + \forall e,e' \in E, e \neq e' \land e \cap e' = \emptyset : c(e) \neq c(e') + $$ + +i) Ein Graph heißt $k$-kantenfärbbar, falls es eine $k$-Kantenfärbung für $G$ +gibt. + +i) Der **chromatische Index** $\chi'(G)$ ist definiert als + $$ + \chi'(G) = \min \{k \in \mathbb{N} \mid + G \text{ ist } k \text{-kantenfärbbar}\} + $$ + + +**Bemerkung**: Es gilt $\chi'(G) \geq \Delta(G)$ mit $\Delta(G) = +\max\limits_{v \in V} deg(v)$, da alle $\Delta(G)$ Kanten eines Knotens $v$ mit +$deg(v) = \Delta(G)$ unterschiedliche Farben haben müssen. + +Es gilt sogar: + +# Satz + +Sei $G=(V,E)$ Graph, dann gilt +$$ +\Delta(G) \leq \chi'(G) \leq \Delta(G) + 1 +$$ + +ohne Beweis + +$$ +\tag*{$\Box$} +$$ + + +**Bemerkung**: zu entscheiden, ob $\chi'(G) = \Delta(G)$ oder +$\chi'(G)=\Delta(G)+1$ ist im Allgemeinen ein schweres Problem. diff --git a/school/di-ma/20181204_2-matching.dot b/school/di-ma/20181204_2-matching.dot new file mode 100644 index 0000000..02785ed --- /dev/null +++ b/school/di-ma/20181204_2-matching.dot @@ -0,0 +1,29 @@ +graph g { + rankdir="LR"; + node [ shape="circle" ]; + { + rank="same"; + J1; + J2; + J3; + J1 -- J2 -- J3 [ style="invis" ]; + } + { + rank="same"; + B1; + B2; + B3; + B4; + + B1 -- B2 -- B3 -- B4 [ style="invis" ]; + } + J1 -- B1 [ penwidth=3 ]; + J1 -- B3; + J1 -- B4; + + J2 -- B3 [ penwidth=3 ]; + J2 -- B4; + + J3 -- B2 [ penwidth=3 ]; + J3 -- B4; +} diff --git a/school/di-ma/20181204_2-matching.md b/school/di-ma/20181204_2-matching.md new file mode 100644 index 0000000..63bbb85 --- /dev/null +++ b/school/di-ma/20181204_2-matching.md @@ -0,0 +1,76 @@ +--- +title: Matching +date: 2018-12-04 +--- + +**Beispiele** + +i) verschiedene Jobs und Bewerber $\widehat{=}$ Knoten. Kanten zwischen Job und +Bewerber, falls Bewerber geeignet ist für Job. + + Ziel: Jedem Job einen Bewerber zuordnen + + ![Beispiel Matching](20181204_2-matching.png) + +i) Statt Jobs haben wir Rechentasks und statt Bewerbern haben wir Rechner. +Kanten zwischen Task und Rechner falls Rechner die nötigen Ressourcen hat, um +Task auszuführen + +i) Heiraten. Kanten zwischen Personen, falls sie sich heiraten wollen. Ziel: +alle sollen heiraten + + +**Bemerkung**: Fall i) und ii) entsprechen bipartiten Graphen. + + +# Definition (Matching) + +Sei $G=(V,E)$ ein Graph und $M \subseteq E$ + +i) $M$ heißt **Matching**, falls + $$ + \forall e_1,e_2 \in M : e_1 \cap e_2 = \emptyset + $$ + +i) Ein Knoten $v \in V$ heißt überdeckt von $M$, falls $\exists e\in M:v\in e$ + +i) Matching $M$ heißt perfekt, falls alle Knoten überdeckt sind, d.h. +$|M|=\frac{|V|}{2}$. Wenn $|V| = 2y + 1$ ($|V|$ ist ungerade), gibt es kein +perfektes Matching + + +**Frage**: Kann man effizient maximale Matchings finden? + +Zumindest für bipartite Graphen, ja! + + +# Notation + +Sei $G=(V,E)$ Graph und $X \subseteq V$. Dann sei + +$$ +\Gamma(X) = \bigcup\limits_{a\in X} \Gamma(a) +$$ + + +# Satz (Hall, Heiratssatz) + +Sei $G=(A\biguplus B, E)$ ein bipartiter Graph. $G$ enthält ein Matching $M +\subseteq E$ mit $|M| = |A|$, genau dann, wenn + +$$ +\forall X \subseteq A : |\Gamma(X)| \geq |X| +$$ + +## Bemerkung + +* Falls Bedingung erfüllt, folgt $|B| \geq |A|$, denn $\Gamma(A) \subseteq B$ +* Falls $|A| = |B|$, dann ist das Matching perfekt. + + +## Beweis + +"$\Rightarrow$" sei $M$ ein Matching mit $|M| = |A|$ und $X \subseteq A$. +Betrachten der Teilgraph $G'=(A\bigcup B, M)$. Dann gilt $| \Gamma(X) | = | X +|$ in $G'$, da $M$ Matching und damit gilt $|\Gamma(X)| \geq |X|$ in $G$, da in +$G$ nur neue Nachbarn hinzu kommen können. diff --git a/school/di-ma/index.md b/school/di-ma/index.md index a663c0c..7aede27 100644 --- a/school/di-ma/index.md +++ b/school/di-ma/index.md @@ -27,3 +27,6 @@ subtitle: > - [2018-11-21 Eulertouren](20181121_1-eulertouren) - [2018-11-21 Planare Graphen](20181121_2-planare_graphen) - [2018-11-28 Knoten-Färbung](20181128_1-knotenfaerbung) +- [2018-11-28 Greedy-Algorithmen](20181128_2-greedy-algorithmen) +- [2018-12-04 Kantenfärbung](20181204_1-kantenfaerbung) +- [2018-12-04 Matching](20181204_2-matching)