Add dima notes
Some checks failed
the build failed

This commit is contained in:
Valentin Brandl 2019-01-28 20:58:59 +01:00
parent cde7b6ca04
commit b62a7e60e4
No known key found for this signature in database
GPG Key ID: 30D341DD34118D7D
37 changed files with 1317 additions and 1 deletions

View File

@ -0,0 +1,17 @@
graph g {
node [ shape="point" ];
{
rank="same";
1 [ xlabel="1" ];
2 [ xlabel="2" ];
}
{
rank="same";
3 [ xlabel="3" ];
4 [ xlabel="4" ];
}
1 -- 2;
1 -- 3;
1 -- 4;
3 -- 4;
}

View File

@ -0,0 +1,18 @@
graph c4 {
node [ shape="point" ];
{
rank="same";
1; 2;
}
{
rank="same";
3; 4;
}
1 -- 2;
3 -- 4;
1 -- 3;
2 -- 4;
}

View File

@ -0,0 +1,21 @@
graph c5 {
node [ shape="point" ];
{
rank="same";
1;
2;
}
{
rank="same";
3;
5;
}
1 -- 2;
2 -- 3;
3 -- 4;
4 -- 5;
5 -- 1;
}

View File

@ -0,0 +1,19 @@
digraph g {
rankdir="LR";
node [
label="";
shape="point";
];
{
rank="same";
1;
2;
1 -> 2;
}
0 -> 1;
0 -> 2;
1 -> 3;
2 -> 3 [ dir="back" ];
}

View File

@ -0,0 +1,7 @@
graph g {
rankdir="LR";
n [ label=""; shape="point" ];
m [ label=""; shape="point" ];
n -- m;
n -- m;
}

View File

@ -0,0 +1,11 @@
digraph g {
{
rank="same";
1;
3;
}
2;
2 -> 3 -> 1 -> 2;
3 -> 2;
}

View File

@ -0,0 +1,7 @@
graph g {
node [ shape="point" ];
1 [ xlabel="1" ];
2 [ xlabel="2" ];
3 [ xlabel="3" ];
1 -- 2 -- 3 -- 1;
}

View File

@ -0,0 +1,20 @@
graph g {
{
rank="same";
1;
2;
}
{
rank="same";
4;
3 [ style="invisible" ];
}
1 -- 2;
1 -- 3 [ style="invisible" ];
1 -- 4 [ style="invisible" ];
3 -- 2 [ style="invisible" ];
2 -- 4;
2 -- 5;
}

View File

@ -0,0 +1,20 @@
graph g {
{
rank="same";
1;
2;
}
{
rank="same";
4;
3;
}
1 -- 2;
1 -- 3;
1 -- 4;
3 -- 2;
2 -- 4;
2 -- 5;
}

View File

@ -0,0 +1,20 @@
graph g {
{
rank="same";
1;
2;
}
{
rank="same";
4;
3 [ style="invisible" ];
}
1 -- 2;
1 -- 3 [ style="invisible" ];
1 -- 4;
3 -- 2 [ style="invisible" ];
2 -- 4;
2 -- 5;
}

View File

@ -0,0 +1,277 @@
---
title: Graphentheorie
date: 2018-10-31
---
Idee:
![Knoten](20181031_1-knoten.png)
![Kante](20181031_1-kante.png)
Knoten entsprechen Objekten, Kanten Beziehungen zwischen den Objekten.
Was wir nicht erlauben:
* Schleifen, d.h. Kanten von einem Konten zu sich selbst
![Schleife](20181031_1-loop.png)
* Mehrfache ungerichtete Kanten zwischen zwei Knoten
![Mehrfach ungerichtet](20181031_1-double_undirected.png)
# Gerichtete Graphen
Hier haben Kanten eine Richtung.
![Gerichteter Graph](20181031_1-dag.png)
Bei gerichteten Graphen erlauben wir zwischen zwei Knoten zwei Kanten mit
unterschiedlicher Richtung.
# Definition (Graph)
Sei $V$ eine endliche Menge und $E$ eine Teilmenge von $E \subseteq
\binom{V}{2} = \{ \{u,v\} | u,v \in V, u \neq v \}$ (alle 2-elementingen
Teilmengen).
Ein Graph ist ein Tupel
$$
G = (V, E)
$$
**Beispiel**: $V = \{1,2,3\}$, $E = \{ \{1,2\}, \{2,3\}, \{1,3\} \}$
![Beispiel Graph](20181031_1-ex_graph.png)
# Definition (Gerichteter Graph; Digraph)
Sei $V$ eine endliche Menge und $E \subseteq V \times V = \{ (u,v) | u,v \in E,
u \neq v \}$.
Ein Digraph ist ein Tupel $G = (V, E)$.
**Beispiel**: $V = \{1,2,3\}$, $E = \{ (2,3), (1,2), (3,1), (3,2) \}$
![Beispiel Digraph](20181031_1-ex_digraph.png)
# Wichtige Beispiele von Graphen
a) Vollständiger Graph
Je zwei Knoten sind miteinander verbunden, d.h. für endliche Menge $V$ mit
$|V| = n$ ist $E = \binom{V}{2}$ für $K_n = (V,E)$
![$K_3$](20181031_1-ex_graph.png)
![$K_4$](20181031_1-k4.png)
![$K_5$](20181031_1-k5.png)
b) Kreisgraph $C_n$
![$C_4$](20181031_1-c4.png)
![$C_5$](20181031_1-c5.png)
Allgemein für $V = \{ v_1, ..., v_n \}$ dann ist $E = \{ \{v_i, v_{i+1}\} |
i \in \{1,..., n-1\} \} \cup \{v_n, v_1\}$
c) Pfad mit $n$ Knoten $P_n$
![Pfad](20181031_1-path.png)
d) $d$-dimensionaler Würfel $Q_d$
Knoten sind alle Elemente aus $\{0,1\}^d$, $V = \{0,1\} \times ... \times
\{0,1\} = \{0,1\}^d$ und es gibt eine Kante zwischen zwei Knoten genau
dann, wenn sich die beiden Knoten an genau einer Stelle unterscheiden.
# Definition (Benachbart, Randknoten, Nachbarschaft, $k$-regulär)
Sei $G = (V, E)$ ein Graph.
a) Zwei Knoten $u,v \in V$ heißen *benachbart* oder *adjazent*, falls $e =
\{u,v\} \in E$. In diesem Fall heißen $u$ und $v$ *Randknoten* von $e$ oder
*inzident* zu $e$
b) Die Nachbarschaft eines Knoten $u \in V$ ist die Menge aller zu $u$
benachbarten Knoten.
$$
\Gamma(u) = \{ v \in V | \{u,v\} \in V \}
$$
Die Größe der Nachbarschaft eines Knotens $u$ heißt **Grad** von $u$
$$
deg(u) = | \Gamma(u) |
$$
c) Ein Graph heißt **$k$-regulär**, falls gilt $deg(u) = k, \forall u \in V$
**Beispiel**: In $Q_2$ sind
* $(00)$ und $(01)$ Nachbarn
* $\Gamma((00)) = \{(01,10)\}$
* $Q_2$ ist 2-regulär, da $deg(u) = 2, \forall u \in V$
* $Q_d$ ist $d$-regulär
* Der Pfad $P_n$ ist nicht regulär
# Andere Darstellung eines Graphen
a) **Adjazenzmatrix**
Wir stellen Nachbarschaftsbeziehungen, d.h. Kanten in Form einer Matrix
dar. Genauer sei $G = (V, E)$ ein Graph mit $V = \{v_1, ..., v_n\}$.
Die Adjazenzmatrix $A$ ist eine $n \times n$ Matrix $A = (a_{ij})$ wobei
$a_{ij} = \begin{cases}
1 & \{v_i, v_j\} \in E \\
0 & \text{sonst}
\end{cases}$
**Beispiel 1**: ![Beispiel Graph](20181031_1-adj_ex.png)
$$
A = \left( \begin{matrix}
0 & 1 & 1 & 1 \\
1 & 0 & 0 & 0 \\
1 & 0 & 0 & 1 \\
1 & 0 & 1 & 0
\end{matrix} \right)
$$
b) **Inzidenzmatrix**
Sei $G = (V,E)$ mit $V = \{v_1, ..., v_n\}$, $E = \{e_1, ..., e_m\}$. Die
Inzidenzmatrix $B$ von $G$ ist eine $n \times m$ Matrix $B = (b_{ij})$
wobei $b_{ij} = \begin{cases}
1 & \text{falls } v_i \text{ inzident zu } e_j \\
0 & \text{sonst}
\end{cases}$.
**Beispiel 2**: ![Beispiel Graph](20181031_1-inzidenz_ex.png)
$$
B = \left(\begin{matrix}
1 & 0 \\
1 & 1 \\
0 & 1
\end{matrix}\right)
$$
**Bemerkung**: Andere Nummerierung von Knoten und Kanten liefert andere
Adjazenz- und Inzidenzmatrix.
**Nochmal Beispiel 1 und 2**:
In Beispiel 1 gilt
$$
deg(1) = 3 \\
deg(2) = 1 \\
deg(3) = 2 \\
deg(4) = 2
$$
Es gilt $deg(1) + deg(2) + deg(3) + deg(4) = 4 \cdot 2 = 8$ und es gibt zwei
Knoten mit ungeradem Grad.
In Beispiel 2 gilt
$$
deg(1) = 1 \\
deg(2) = 2 \\
deg(3) = 1 \\
\\
\sum\limits_{i=1}^3 deg(i) = 4 = 2 \cdot 2
$$
Und es gibt zwei Knoten mit ungeradem Grad.
Allgemein gilt:
# Satz
Sei $G = (V, E)$ ein Graph, dann gilt $\sum\limits_{u \in V} deg(u) = 2 |E|$
# Beweis
Durch doppeltes Abzählen der Inzidenzmatrix $B = (b_{ij})$.
a) Spaltensumme liefert in jeder Spalte 2. Da es genau $|E|$ Spalten gibt, ist
$\sum\limits_{i,j} b_{ij} = 2 |E|$
b) Zeilensumme liefert in Zeile $i$ $deg(v_i)$ und damit insgesamt
$\sum\limits_{i,j} b{ij} = \sum\limits_{v \in V} deg(v)$
$$
\tag*{$\Box$}
$$
**Folgerung**: Sei $G=(V,E)$ ein Graph. Die Anzahl der Knoten mit ungeradem
Grad ist gerade.
## Beweis
Wir teilen die Menge $V$ der Knoten in $V_1$ und $V_2$, wobei
$$
\begin{align*}
V_1 &= \{ v \in V | deg(v) \text{ ist ungerade} \} \\
V_2 &= \{ v \in V | deg(v) \text{ ist gerade} \} \\
\\
V_1 \cup V_2 &= V \\
V_1 \cap V_2 &= \emptyset
\end{align*}
$$
Es gilt
$$
\begin{align*}
& \sum\limits_{v \in V} deg(v) &= \sum\limits_{v \in V_1} deg(v) + \sum\limits_{v
\in V_2} deg(v) = 2 |E| \\
\Rightarrow & \sum\limits_{v \in V_1} deg(v) &= \underbrace{2 |E| - \sum\limits_{v
\in V_2} deg(v)}_\text{gerade} \\
\Rightarrow & \sum\limits_{v \in V_1} deg(v) \text{ ist gerade} \\
\Rightarrow & |V_1| \text{ ist gerade}
\end{align*}
$$
$$
\tag*{$\Box$}
$$
# Definition (Teilgraph/Untergraph)
Sei $G=(V,E)$ ein Graph.
a) Ein Graph $G' = (V',E')$ heißt Teilgraph von $G$, falls $V' \subseteq V$ und
$E' \subseteq E$.
b) Ein Teilgraph $G' = (V',E')$ heißt Untergraph von $G$, falls $E' = \{
\{u,v\} | u,v \in V' \land \{u,v\} \in E \} = E \cap \binom{V'}{2}$
**Beispiel**:
![$G$](20181031_1-ex_tg_ug.png)
dann ist ![$G$](20181031_1-ex_tg.png) ein Teilgraph von $G$ (aber kein
Untergraph)
und ![$G$](20181031_1-ex_ug.png) ist ein Untergraph von $G$
**Notation**: Sei $G=(V,E)$ ein Graph und $V' \subseteq V$, $E' \subseteq E$,
dann bezeichnet
a) $G[V']$ den von $V'$ induzierten Untergraph
b) $G \setminus E' = (V, E \setminus E')$
c) $G \setminus V' = (V \setminus V', E) = G[V \setminus V']$

View File

@ -0,0 +1,5 @@
graph g {
node [ shape="point" ];
1 -- 2 [ label="e1" ];
2 -- 3 [ label="e2" ];
}

View File

@ -0,0 +1,11 @@
graph g {
node [ shape="point" ];
{
rank="same";
1;
2;
}
1 -- 2 -- 3 -- 4 -- 1 -- 3;
2 -- 4;
}

View File

@ -0,0 +1,17 @@
graph k5 {
node [ shape="point" ];
{
rank="same";
1;
2;
}
{
rank="same";
3;
5;
}
1 -- 2 -- 3 -- 4 -- 5 -- 1 -- 3 -- 5 -- 2 -- 4 -- 1;
}

View File

@ -0,0 +1,6 @@
graph g {
rankdir="LR";
n [ label=""; shape="point" ];
m [ label=""; shape="point" ];
n -- m;
}

View File

@ -0,0 +1,3 @@
digraph g {
n [ label=""; shape="point" ];
}

View File

@ -0,0 +1,4 @@
graph g {
n [ label=""; shape="point" ];
n -- n
}

View File

@ -0,0 +1,8 @@
graph path {
rankdir="LR";
node [ shape="point" ];
1 -- 2 -- 3;
3 -- 4 [ style="dotted" ];
4 -- 5;
}

View File

@ -0,0 +1,19 @@
graph g {
node [ shape="circle" ];
{
rank="same";
1;
2;
}
{
rank="same";
3;
4;
}
1 -- 2;
1 -- 3;
1 -- 4;
2 -- 4;
}

View File

@ -0,0 +1,23 @@
graph g {
node [ shape="circle" ];
{
rank="same";
1;
2;
5;
6;
}
{
rank="same";
3;
4;
7;
}
1 -- 2;
1 -- 3;
1 -- 4;
2 -- 4;
5 -- 7;
}

View File

@ -0,0 +1,111 @@
---
title: Zusammenhangskomponenten
date: 2018-11-06
---
# Definition (Weg, Pfad, Kreis)
Sei $G=(V,E)$ ein Graph.
a) Ein Weg $w = (v_0, v_1, ..., v_{l-1})$ (der Länge $l$) ist ein Tupel mit
$v_i \in V$ und $\{v_i, v_{i+1}\} \in E, \forall i \in \{0, ... l-2\}$
b) Ein Pfad ist ein Weg ohne Kontenwiederholung, d.h. $p = \{v_0, v_1, ...
v_{l-1}\}$ mit $v_i \in V$, $\{v_i, v_{i+1}\} \in E, \forall i \in
\{0,...,l-2\}$ und $v_i \neq v_j, \forall i = j$
c) Ein Kreis ist ein Pfad $k = (v_0, ... v_{l-1})$ mit $\{v_{l-1}, v_0\} \in E$
**Beispiel**: ![Beispiel Graph](20181106_1-weg_pfad_kreis.png)
* $(1,2,3,2,1,3)$ Weg, aber kein Pfad
* $(3,1,2,4)$ Weg und Pfad, aber kein Kreis
* $(2,4,1)$ Weg, Pfad und Kreis
# Definition (Verbindbar)
Sei $G=(V,E)$ und $u,v \in V$, dann heißen $u$ und $v$ verbindbar, falls es
einen Weg von $u$ nach $v$ gibt.
Verbindbar ist eine Relation auf der Menge der Knoten. Bei $u$ verbindbar mit
$v$: $u \sim v$
Diese Relation ist
a) **reflexiv**: $u \sim u, \forall u \in V$ (durch den Punktpfad $(u)$)
a) **symmetrisch**: Falls $u \sim v$, dann auch $v \sim u$ (da Graph
ungerichtet)
a) **transitiv**: Falls $u \sim v$ und $v \sim w$, dann gilt auch $u \sim w$
(hängen die Wege von $u$ nach $v$ und $v$ nach $u$ aneinander)
$\Rightarrow$ *Verbindbar* ist eine Äquivalenzrelation
Es gibt Äquivalenzklassen. Für $u \in V$ betrachte $[v] = \{v \in V | u \sim
v\}$ Äquivalenzklasse von $u$. Es gilt für $u,v \in V$
$$
[u] \cap [v] = \begin{cases}
\emptyset & \lnot (u \sim v) \\
[u] = [v] & u \sim v
\end{cases}
$$
und $\bigcup\limits_{u \in V} [u] = V$, d.h. Äquivalenzklassen bilden Partition
von $V$.
# Definition (Zusammenhangskomponente)
Sei $G=(V,E)$ ein Graph. Die Untergraphen $G[[u]]$, $u \in V$ heißen
Zusammenhangskomponenten von $G$. $G$ heißt zusammenhängend, falls er nur aus
einer Zusammenhangskomponente besteht, d.h. $[u] = V, \forall u \in V$
**Beispiel**: ![Beispiel Graph](20181106_1-zhk.png)
Hat 3 Zusammenhangskomponenten:
$$
\begin{align*}
[1] &= &\{ 1,2,3,4 \} \\
[2] &= [3] = [4] = &\{ 1,2,3,4 \} \\
[5] &= [7] = &\{ 5,7 \} \\
[6] &= &\{ 6 \} \\
\end{align*}
$$
# Satz
Jeder Graph $G=(V,E)$ hat mindestens $|V| - |E|$ Zusammenhangskomponenten.
# Beweis
Per Induktion über die Anzahl der Kanten $|E|$.
Für $|E| = 0$ hat $G=(V,E)$ $|V|$ Komponenten. Sei der Satz richtig für alle
Graphen mit $|E| \geq m$. Betrachte nun $G=(V,E)$ mit $|E| = m+1$.
Sei $e = \{u,v\} \in E$ und $G' = G \setminus \{e\} = (V, E')$, dann gilt $|E'|
= m$ und nach Voraussetzung hat $G'$ mindestens $|V| - |E'| = |V| - m$
Komponenten.
2 Fälle:
a) $u$ und $v$ liegen in der gleichen Zusammenhangskomponente von $G'$, dann
hat $G$ die gleichen Zusammenhangskomponenten wie $G'$
a) $u$ und $v$ liegen un zwei verschiedenen Zusammenhangskomponenten von $G'$,
dann hat $G$ eine Zusammenhangskomponente weniger, als $G'$
$$
\tag*{$\Box$}
$$
**Folgerung**: Für jeden zusammenhängenden Graph $G=(V,E)$ gilt $|E| \leq
|V|-1$

View File

@ -0,0 +1,95 @@
---
title: Bäume
date: 2018-11-06
---
Bäume sollen zusammenhängende Graphen sein. Mit minimaler Anzahl von Kanten bei
gegebener Knotenmenge, d.h. $|E| = |V| - 1$. Solche Graphen können keine Kreise
enthalten.
# Definition (Baum, Wald, Blatt)
a) Ein **Baum** ist ein kreisfreier, zusammenhängender Graph
a) Ein **Wald** ist ein Grpah mit Zusammenhangskomponenten, die Bäume sind.
a) ein **Blatt** ist ein Knoten $u$ in einem Baum $T=(V,E)$ mit $deg(u) = 1$.
Knoten, die keine Blätter sind, heißen innere Knoten
$$
\tag*{$\Box$}
$$
**Beispiel**
![Baum](20181106_2-tree.png)
Ist ein Baum. Blätter $2,5,6$
![Wald](20181106_2-forest.png)
# Lemma
a) Ein Baum mit mindestens 2 Knoten hat mindestens 2 Blätter.
a) In einem Baum gibt es zwischen je 2 Knoten genau einen Pfad.
a) Sei $T=(V,E)$ ein Baum, dann hat $T\setminus \{v\}$ für $v\in V$ genau
$deg(v)$ Zusammenhangskomponenten.
# Beweis (Lemma)
a) Da es mindestens 2 Konten $u,v$ gibt, gibt es auch mindestens 1 Kante
${u,v}$ mit $u,v \in V$. Gehe in jeder Richtung den Baum entlang, bis wir in
einer Sackgasse enden. diese beiden Endpunkte sind Blätter. Da es keine Kreise
gibt, muss die Sackgasse erreicht werden.
a) Gäbe es 2 Pfade, dann auch einen Kreis. Widerspruch zu "kreisfrei"
a) jetzt nicht
# Satz
Für jeden Baum $T = (V,E)$ gilt $|E| = |V| - 1$
# Beweis
Wir nehmen an, der Satz sei falsch. Sei $T_0 = (V_0, E_0)$ ein Gegenbeispiel
mit minimaler Anzahl von Knoten, d.h. es gilt $|E_0| \neq |V_0|-1$ und für alle
Bäume $T=(V,E)$ mit weniger als $|V_0|$ Knoten gilt $|E|=|V|-1$.
Es gilt sicher $|V_0| \geq 2$, dann gibt es in $T_0$ nach Lemma a) mindestens 2
Blätter $u, v$.
Betrachte $T' = T_0 \setminus \{u\}$. Da $u$ Blatt gilt $deg(u) = 1$ und laut
Lemma c) hat $T'$ $deg(u)=1$ viele Zusammenhangskomponenten, d.h. $T'$ ist
zusammenhängend und kreisfrei.
$\Rightarrow T'$ ist ein Baum mit $T' = (V',E')$ mit $V' = V\setminus \{u\}$,
$E' = E \setminus \{u, u'\}$, wobei $u'$ der (eindeutige) mit $u$ benachbarte
Knoten ist.
Da $|V'| \leq |V_0|$ gilt $|E'| = |V'| - 1$, damit $|E_0| - 1 = (|V_0| - 1) -1$
$\Rightarrow |E_0| = |V_0| - 1$. Widerspruch dazu, dass $T_0$ ein Gegenbeispiel
ist.
$$
\tag*{$\Box$}
$$
# Definition (Spannbaum)
Sei $G=(V,E)$ ein Graph. Ein Spannbaum $T=(V',E')$ ist ein Teilgraph von $G$
mit
i) $T$ ist Baum
i) $V' = V$
# Satz (Existenz Spannbaum)
Ein Graph hat genau dann einen Spannbaum, falls $G$ zusammenhängend ist.

View File

@ -0,0 +1,20 @@
graph g {
node [ shape="circle" ];
{
rank="same";
1;
5;
7;
}
{
rank="same";
2;
3;
6;
}
1 -- 2;
1 -- 3;
3 -- 4;
5 -- 6;
}

View File

@ -0,0 +1,19 @@
graph g {
node [ shape="circle" ];
{
rank="same";
2;
3;
}
{
rank="same";
5;
6;
}
1 -- 2;
1 -- 3;
3 -- 4;
4 -- 5;
4 -- 6;
}

View File

@ -0,0 +1,19 @@
digraph g {
node [ shape="circle" ];
{
rank="same";
1;
2;
}
{
rank="same";
4;
3;
}
1 -> 2;
2 -> 3;
3 -> 1;
4 -> 1;
}

View File

@ -0,0 +1,76 @@
---
title: Gerichtete Graphen
date: 2018-11-07
---
**Beispiel**: ![Digraph](20181107_1-dg.png)
$G = (V,E)$
* $V$ endliche Menge
* $E \subseteq V \times V$
Kanten in $G$ bestehen aus $(u,v)$ mit $u,v \in V, u \neq v$. $u$ heißt
Startknoten, $v$ heißt Endknoten der Kante $(u,v)$. Vorstellung: Laufen im
Graph nur in der richtigen Richtung. Kanten sind "Einbahnstraßen".
Für gerichtete Graphen definieren wir: $G=(V,E), u\in V$
* $outdeg(u) = |\{v \in V | (u,v) \in E\}|$
* $indeg(u) = |\{v \in V | (v,u) \in E\}|$
Beispiel von oben:
* $outdeg(1) = 1$, $indeg(1) = 2$
* $outdeg(4) = 1$, $indeg(4) = 0$
# Pfade, Wege, Kreise (gerichtet)
Definiert man analog zum ungerichteten Fall mit der Einschränkung, das Knoten
eines Pfades/Weges/Kreises in der richtigen Richtung verbunden sind.
**Beispiel**: Pfad
*Gegeben*: $G=(V,E)$ gerichteter Graph.
Ein Pfad $p$ ist ein Tupel $(v_0,...,v_{l-1})$ mit $v_i \in V$ und $(v_i,
v_{i+1}) \in E, \forall i \in \{0,...,l-2\}, v_i \neq v_j, \forall i \neq j$.
$p$ heißt $v_0v_{l-1}$-Pfad. Existenz eines Pfades von $u$ nach $v$ ($u,v \in
V$) bezeichnen wir mit $u \rightsquigarrow v$.
**Beispiel**: (wie oben)
* $(1,2,3,1,2)$ ist Weg
* $(4,1,2)$ ist Pfad
* $(2,3,1)$ ist Kreis
# Definition (Zusammenhang)
Sei $G=(V,E)$ gerichteter Graph und $u,v \in V$ Knoten. $u$ und $v$ heißen
stark zusammenhängend, falls es einen gerichteten $uv$-Pfad und einen
gerichteten $vu$-Pfad gibt, d.h. falls $u \rightsquigarrow v$ und $v
\rightsquigarrow u$
$$
\tag*{$\Box$}
$$
**Beispiel**: (von oben)
* 1 und 3 sind stark zusammenhängend
* 1 und 4 sind nicht stark zusammenhängend (kein Pfad von 1 nach 4)
**Bemerkung**: stark zusammenhängend ist Äquivalenzrelation. Die Untergraphen,
die den Äquivalenzklassen entsprechen, heißen **(starke)
Zusammenhangskomponenten**.
Ein gerichteter Graph $G$ heißt stark zusammenhängend, falls $G$ nur eine
Zusammenhangskomponente hat.

View File

@ -0,0 +1,26 @@
digraph g {
node [ shape="circle" ];
{
rank="same";
1;
2;
}
{
rank="same";
4;
3;
}
1 -> 2;
2 -> 3;
3 -> 1;
4 -> 1;
edge [ style="dotted" ];
1 -> 3;
2 -> 1;
3 -> 2;
4 -> 2;
4 -> 3;
}

View File

@ -0,0 +1,102 @@
---
title: Transitive Hülle
date: 2018-11-07
---
Gegeben eine endliche Menge $V$ und eine Relation $R$ auf $V$, d.h. $R
\subseteq V \times V$.
Zwei Elemente $u,v \in V$ stehen in Relation, falls $(u, v) \in R$.
**Frage**: Wie findet man die kleinste transitive Hülle von $R^+$ mit $R
\subseteq R^+$?
$R^+$ heißt transitive Hülle von $R$.
Als Graphenproblem:
Wir modellieren "in relation stehen" durch Kanten
# Definition (Transitive Hülle)
Sei $G=(V,E)$ ein gerichteter Graph. Der Graph $G^+ = (V,E^+)$ mit $E^+ = \{
(v,b) | u,v \in V, (u \rightsquigarrow v) \in G \}$ heißt **transitive Hülle**
von $G$.
**Beispiel**: ![Graph](20181107_1-dg.png)
![Transitive Hülle](20181107_2-trans_closure.png) ist die transitive Hülle von
obigem Graph.
# Algorithmus (Berechnen der Transitiven Hülle; Warshall)
Für einen gerichteten Graphen $G=(V,E)$ mit $V=\{1,...,n\}$ betrachte die
Adjazenzmatrix von $G$ definiert als $A[i,j] = \begin{cases}
1 & (i,j) \in E \\
0 & (i,j) \notin E
\end{cases}$
**Bemerkung**: $A$ ist im allgemeinen nicht mehr symmetrisch (anders als bei
ungerichteten Graphen).
**Idee**: Ausgehend von $A$ schrittweise die Adjazenzmatrix der transitiven
Hülle zu berechnen.
Für $k \in \{0, ..., n\}$ definieren wir Matrizen $T_k$ rekursiv als
$T_k[i,j] = \begin{cases}
1 & \text{falls es einen $i$-$j$-Pfad mit Zwischenknoten aus } \{1, ...,
k\} \text{ gibt} \\
0 & \text{sonst}
\end{cases}$.
Dann gilt $T_0 = A$ (Adjazenzmatrix) und $T_n$ ist die Adjazenzmatrix der
transitiven Hülle
Wir wollen $T_k$ rekursiv aus $T_{k-1}$ berechnen (für $k \geq 1$). Es gilt
$T_k[i,j] = max \{ T_{k-1}[i,j], T_{k-1}[i,k] \cdot T_{k-1}[k,j] \}$, d.h.
$T_k[i,j] = 1$ genau dann, wenn $T_{k-1}[i,j] = 1$ oder $T_{k-1}[i,k] = 1$ und
$T_{k-1}[k,j] = 1$.
Die $i$-$j$-Pfade mit Zwischenknoten aus $\{1,...,k\}$ zerfallen in 2 Fälle:
i) $i$-$j$-Pfade mit Zwischenknoten aus $\{1,...,k-1\}$
i) $i$-$j$-Pfade, die den Knoten $k$ als Zwischenknoten enthalten
Pfade im Fall
i) gibt es, falls $T_{k-1}[i,j] = 1$
i) gibt es, falls $T_{k-1}[i,k] = 1$ und $T_{k-1}[k,j] = 1$
## Algorithmus im Pseudocode
**Eingabe**: Adjazenzmatrix $A$ von $G=(V,E)$ (gerichteter Graph)
**Ausgabe**: Adjazenzmatrix der transitiven Hülle
i) $W = A$
i) `for` $k$ `in` $\{1,...,n\}$ `do`
`for` $i$ `in` $\{1,...,n\}$ `do`
`for` $j$ `in` $\{1,...,n\}$ `do`
$W[i,j] = max \{ W[i,j], W[i,k] \cdot W[k,j] \}$
i) Ausgabe $W$
**Laufzeit**: $O(n^3)$
**Korrektheit**: Basiert auf Rekusionsformel von oben und der Bemerkung
$T_{k-1}[i,k] = T_k[i,k]$ und $T_{k-1}[k,j] = T_k[k,j]$.
Dies gilt, da Pfade mit Startknoten $i$ und Endknoten $k$ und Zwischenknoten
aus $\{1, ..., k-1\}$ sind (in Pfaden gibt es keine Kotenwiederholungen).
Algorithmus ist Beispiel für dynamische Programmierung, dazu später mehr.

View File

@ -0,0 +1,33 @@
---
title: Zusammenhangskomponenten
date: 2018-11-14
---
Breitensuche kann genutzt werden, um die Zusammenhangskomponenten eines Graphen
zu berechnen.
# Algorithmus (vollständige Breitensuche)
**Eingabe**: $G=(V,E)$ als Adjazenzliste
i) setze $i = 1$
i) `while(V `$\neq \emptyset$`)` do
a) wähle $s \leftarrow V$ beliebig
a) $d,p \leftarrow BREITENSUCHE(G,s)$
a) $v_i = \{ v \in V | d[v] \neq \infty \}$
a) $V' = V \setminus \{v_i\}$
a) $G = G[V']$
a) $i \leftarrow i + 1$
**Ausgabe**: (Zusammenhangskomponenten von $G$) $G[V_1], ... G[V_{i-1}]$
# Satz (Laufzeit vollständige Breitensuche)
Vollständige Breitensuche berechnet in Zeit $O(|V| + |E|)$ die
Zusammenhangskomponenten von $G$.
Beweis: klar

View File

@ -0,0 +1,33 @@
---
title: Datenstruktur Stack
date: 2018-11-14
---
**Beispiel**:
* Postkörbchen
* Programstack
**Idee**: Man kann Sachen oben auf den Stack legen und Sachen (wieder von oben)
vom Stack entfernen (LIFO).
# Definition (Stack)
Stack ist eine Datenstruktur für eine Menge $U$ mit folgenden Operationen:
i) Erzeugen eines leeren Stacks
$S \leftarrow new Stack()$
i) Einfügen eines Elements $u \in U$
$S.push(u)$
i) Entfernen der **zuletzt** eingefügten Elements vom Stack
$u \leftarrow S.pop()$
i) Testen, ob Stack leer ist
$S.isEmpty()$

View File

@ -0,0 +1,29 @@
graph g {
node [ shape="circle" ];
{
rank="same";
A;
C;
E;
}
{
rank="same";
B;
D;
F;
}
A -- B;
A -- C;
B -- C;
B -- D;
C -- D;
C -- E;
D -- E;
E -- F;
edge [ style="dotted" ];
A -- C -- B -- D -- E -- F;
}

View File

@ -0,0 +1,72 @@
---
title: Tiefensuche
date: 2018-11-14
---
Andere Art einen Spannbaum zu finden.
**Idee**: Starte bei einem Startknoten und laufe im Graphen soweit wie möglich
(ohne Knotenwiederholung).
Zwei Änderungen gegenüber Breitensuche:
i) Stack statt Queue
i) Wir bearbeiten zuerst nur einen Nachbarn
# Algorithmus (Tiefensuche)
**Eingabe**: $G=(V,E)$ und $s \in V$
i) $pred[v] = NIL, \forall v \in V$
i) $S \leftarrow new Stack()$
i) $S.push(s)$
i) `while (!`$S.isEmpty()$`)`
a) $v \leftarrow S.pop()$
a) falls $\exists u \in \Gamma(v) \setminus \{s\}, pred[u] == NIL$
* $pred[u] = v$
* $S.push(v)$
* $S.push(u)$
**Ausgabe**: $pred[v], \forall v \in V$
**Beispiel**: Tiefensuche (Startknoten $A$)
![Graph](20181114_3-dfs.png)
| $v$ | A | B | C | D | E | F |
| --- | --- | --- | --- | --- | --- | --- |
| $pred[v]$ | $\emptyset$ | C | A | B | D | E |
| Stack |
| --- |
| ~~F~~ |
| ~~E~~ |
| ~~E~~ |
| ~~D~~ |
| ~~D~~ |
| ~~B~~ |
| ~~B~~ |
| ~~C~~ |
| ~~C~~ |
| ~~A~~ |
| ~~A~~ |
| S |
# Satz (Spannbaum Erzeugung)
Bei Eingabe eines zusammenhängenden Graphen $G=(V,E)$ liefert Algorithmus
Tiefensuche einen Spannbaum $T=(V,E)$ mit $E' = \{ \{u,pred[u]\} | u \in V
\setminus \{s\} \}$ von $G$ in Laufzeit $O(|V| + |E|)$
# Beweis
Analog zur Breitensuche

View File

@ -0,0 +1,23 @@
graph g {
node [ shape="circle" ];
{
rank="same";
2;
3;
}
{
rank="same";
4;
5;
6;
7;
}
1 -- 2;
1 -- 3;
2 -- 4;
2 -- 5;
3 -- 6;
3 -- 7;
}

View File

@ -0,0 +1,15 @@
graph g {
node [ shape="circle" ];
10 -- -10;
10 -- 100;
-10 -- -20;
-10 -- -3;
-20 -- -25;
-3 -- -4;
-3 -- -2;
100 -- 20;
100 -- 300;
300 -- 200;
300 -- 301;
}

View File

@ -0,0 +1,11 @@
graph g {
node [ shape="circle" ];
5 -- 4 -- 1;
{
rank="same";
2;
3;
}
1 -- 2;
1 -- 3;
}

View File

@ -0,0 +1,90 @@
---
title: Wurzelbäume
date: 2018-11-14
---
**Idee**: wir zeichnen einen Knoten $v \in V$ für einen Baum $T=(V,E)$ aus,
nennen ihn Wurzel.
![Wurzelbaum](20181114_4-wb.png)
* $5$: Wurzel
* $4$: Kindknoten
* $2$, $3$: Geschwister
* $4, 1, 2, 3$: Teilbaum
* $H(T) = 3$
Wurzelbäume "wachsen" nach unten.
# Definition (Wurzelbaum)
Sei $T=(V,E)$ ein Baum. Wir definieren für $v \in V$ den in $v$ gewurzelten
Baum $T_v$ mit
i) $v$ heißt Wurzel
i) Alle $u \in \Gamma(v)$ heißen Kindknoten von $v$, $v$ heißt Elternknoten von
$u$
i) Kindknoten mit gleichen Elternknoten heißen Geschwister
i) Sei $u$ Kindknoten von $v$. Dann ist $u$ die Wurzel eines Teilbaums mit
Kindknoten $\Gamma(u) \setminus \{v\}$
i) Für $u \in V$ mit einem $u$-$v$-Pfad der Länge $k$ sie die $Tiefe(u) = k$
i) Die Höhe eines Wurzelbaums ist definiert als $H(T_v) = \max\limits_{u \in V}
\{ Tiefe(u) \}$
$$
\tag*{$\Box$}
$$
# Definition (Binärbaum)
Sei $T_v=(V,E)$ ein in $v$ gewurzelter Baum.
i) $T_v$ heißt Binärbaum, falls jeder Knoten maximal 2 Kindknoten hat.
i) $T_v$ heißt **vollständiger** Binärbaum, falls jeder Knoten, der kein Blatt
ist, genau 2 Kindknoten hat und alle Blätter gleiche Tiefe haben.
**Beispiel**:
i) oben ist Binärbaum, aber nicht vollständig
i) ![Binärbaum](20181114_4-bb.png) Vollständiger Binärbaum der Höhe 2
**Bemerkung**: Ein vollständiger Binärbaum der Höhe $n$ hat $t$ Knoten mit $t =
2^{n+1} - 1 = \sum\limits_{i=0}^n 2^i$
Binärbäume können beim Suchen von Elementen in einer endlichen Menge genutzt
werden.
# Definition (Binärer Suchbaum)
Sei $T_v=(V,E)$ mit $V \subseteq \mathbb{Z}$ ein binärer Wurzelbaum mit Wurzel
$v$. $T_v$ heißt binärer Suchbaum, falls für alle $u \in V$ gilt
i) $u_l \leq u, \forall u_l \in V$ im linken Teilbaum
i) $u_r \geq u, \forall u_r \in V$ im rechten Teilbaum
$$
\tag*{$\Box$}
$$
**Beispiel**: ![Binärer Suchbaum](20181114_4-bsb.png)
# Algorithmus (Binäre Suche)
**Eingabe**: Suchbaum $T_v=(V,E)$ und Element $u \in \mathbb{Z}$
i) setze $w = v$
i) `while (w `$\neq$`u)` und $w$ kein Blatt
a) falls $u < w$: setze $w \leftarrow$ linker Kindknoten von $w$
a) falls $u > w$: setze $w \leftarrow$ rechter Kindknoten von $w$
**Ausgabe**: falls $w = u$ dann "u gefunden", sonst "u nicht gefunden"

View File

@ -11,6 +11,15 @@ subtitle: >
- [2018-10-17 Wichtige Kombinatorische Probleme](20181017_1-wichtige_kombinatorische_probleme) - [2018-10-17 Wichtige Kombinatorische Probleme](20181017_1-wichtige_kombinatorische_probleme)
- [2018-10-23 Zahlpartitionen](20181023_1-zahlpartitionen) - [2018-10-23 Zahlpartitionen](20181023_1-zahlpartitionen)
- [2018-10-23 Bälle und Urnen](20181023_2-baelle_und_urnen) - [2018-10-23 Bälle und Urnen](20181023_2-baelle_und_urnen)
- [2018-10-30 Catalanzahlen](20181030_1-catalanzahlen.md) - [2018-10-30 Catalanzahlen](20181030_1-catalanzahlen)
- [2018-10-31 Graphentheorie](20181031_1-graphentheorie)
- [2018-11-06 Zusammenhangskomponenten](20181106_1-zusammenhangskomponenten)
- [2018-11-06 Bäume](20181106_2-baeume)
- [2018-11-07 Gerichtete Graphen](20181107_1-directed_graphs)
- [2018-11-07 Transitive Hülle](20181107_2-transitive-closure)
- [2018-11-13 Directed Acyclic Graph](20181113_1-dag) - [2018-11-13 Directed Acyclic Graph](20181113_1-dag)
- [2018-11-13 Breitensuche](20181113_2-breitensuche) - [2018-11-13 Breitensuche](20181113_2-breitensuche)
- [2018-11-14 Zusammenhangskomponenten](20181114_1-zusammenhangskomponenten)
- [2018-11-14 Datenstruktur Stack](20181114_2-stack)
- [2018-11-14 Tiefensuche](20181114_3-tiefensuche)
- [2018-11-14 Wurzelbäume](20181114_4-wurzelbaeume)