view notes/tex/graphs.tex @ 52:6669987ffd32

thirteenth sheet and notes
author Markus Kaiser <markus.kaiser@in.tum.de>
date Tue, 28 Jan 2014 00:42:39 +0100
parents 7a8c748e3010
children
line wrap: on
line source

\defineUnit{graphdefinition}{%
\begin{frame}
    \frametitle{Graphen}

    \begin{definition}[Graph]
        Ein (einfacher, ungerichteter) \structure{Graph $G = (V, E)$} ist ein Zweitupel aus \structure{Knotenmenge $V$} und \structure{Kantenmenge $E \subseteq \binom{V}{2}$}.
    \end{definition}
    \begin{itemize}
        \item $\binom{V}{2}$ ist Notation für alle zweielementigen Teilmengen.
        \item V für \structure{Vertices}, E für \structure{Edges}
    \end{itemize}

    \vfill

    \begin{example}[]
        \vspace{.5em}
        \begin{columns}[c]
            \begin{column}{.50\textwidth}
                \begin{align}
                    G &= (V, E) \\
                    V &= \left\{ v_1, v_2, v_3, v_4, v_5, v_6, v_7 \right\} \\
                    E &= \{\left\{ v_1, v_2 \right\}, \left\{ v_1, v_4 \right\}, \\
                        &\qquad\!\left\{ v_1, v_5 \right\}, \left\{ v_2, v_3 \right\},\\
                        &\qquad\!\left\{ v_4, v_5 \right\}, \left\{ v_6, v_7 \right\} \}
                \end{align}
            \end{column}
            \begin{column}{.45\textwidth}
                \begin{tikzpicture}[small]
                    \tikzstyle{vertex} = [pretty]
                    \tikzstyle{edge} = [draw, thick, -]

                    \draw (0, 0)
                        +(0, 0) node[vertex] (v1) {$v_1$}
                        +(1, 1) node[vertex] (v2) {$v_2$}
                        +(2.5, 1) node[vertex] (v3) {$v_3$}
                        +(0, -1) node[vertex] (v4) {$v_4$}
                        +(1.5, 0) node[vertex] (v5) {$v_5$}
                        (2.5, -1) node[vertex] (v6) {$v_6$}
                        (3.5, 0) node[vertex] (v7) {$v_7$};

                    \draw[edge]
                        (v1) -- (v2)
                        (v1) -- (v4)
                        (v1) -- (v5)
                        (v2) -- (v3)
                        (v4) -- (v5)
                        (v6) -- (v7);
                \end{tikzpicture}
            \end{column}
        \end{columns}
    \end{example}
\end{frame}

\begin{frame}
    \frametitle{Vollständige Graphen}

    \begin{definition}[Vollständiger Graph]
        Im \structure{vollständigen Graphen $K_n$} mit $n$ Knoten sind alle Knoten durch Kanten verbunden.\\
    \end{definition}
    \begin{itemize}
        \item Er enthält $\binom{n}{2} = \frac{n(n-1)}{2}$ Kanten.
    \end{itemize}

    \vfill

    \begin{example}[]
        \centering
        \begin{tikzpicture}
            \tikzstyle{edge} = [draw, thick, -]
            \def\dx{2.2}
            \def\ly{-.6}

            \draw
                (0, 0)
                +(0.5, 0) node[pretty] (ea) {}
                +(0.5, \ly) node {$K_1$}
                (\dx, 0)
                +(0.5, 0) node[pretty] (za) {}
                +(0.5, 1) node[pretty] (zb) {}
                +(0.5, \ly) node {$K_2$}
                ++(\dx, 0)
                +(0, 0) node[pretty] (da) {}
                +(1, 0) node[pretty] (db) {}
                +(0.5, 1) node[pretty] (dc) {}
                +(0.5, \ly) node {$K_3$}
                ++(\dx, 0)
                +(0, 0) node[pretty] (va) {}
                +(1, 0) node[pretty] (vb) {}
                +(0, 1) node[pretty] (vc) {}
                +(1, 1) node[pretty] (vd) {}
                +(0.5, \ly) node {$K_4$}
                ++(\dx, 0) node (k5) {}
                +(0.5, \ly) node {$K_5$};
            \draw[edge]
                (za) -- (zb)
                (da) -- (db) -- (dc) -- (da)
                (va) -- (vb) -- (vc) -- (vd) -- (va) -- (vc) (vb) -- (vd);

            \foreach \name/\angle/\dist in {
                fa/18/.85, fb/90/.85, fc/162/.85, fd/234/.85, fe/306/.85} {
                \draw
                (k5)
                ++(54:.85)
                +(\angle:\dist) node[pretty] (\name) {};
            }

            \foreach \a/\b in {
                fa/fb, fa/fc, fa/fd, fa/fe,
                fb/fc, fb/fd, fb/fe,
                fc/fd, fc/fe,
                fd/fe} {
                \draw[edge] (\a) -- (\b);
            }
        \end{tikzpicture}
    \end{example}
\end{frame}

\begin{frame}
    \frametitle{Wege, Pfade und Kreise}

    \begin{definition}[$k$-Weg]
        Ein \structure{$k$-Weg} in einem Graphen $G=(V,E)$ ist eine nichtleere Folge von Knoten $\structure{(v_0, \dots, v_k)} \in V^{k+1}$ von $k+1$ Knoten, sodass zwischen aufeinanderfolgenden Knoten Kanten existieren.
        \begin{align}
            \forall i \in \Z_k. \left\{ v_i, v_{i+1} \right\} \in E
        \end{align}
        $(v_0)$ bezeichnet einen $0$-Weg.
    \end{definition}

    \vfill

    \begin{definition}[$k$-Pfad]
        Ein \structure{$k$-Pfad} in $G$ ist ein $k$-Weg in $G$, in dem kein Knoten mehrfach vorkommt.
    \end{definition}

    \vfill

    \begin{definition}[$k$-Kreis]
        Ein \structure{$k$-Kreis} ($k \geq 3$) in $G$ ist ein $k$-Weg $(v_0, \ldots, v_k)$ in $G$, wobei $v_0, \dots, v_{k-1}$ paarweise verschieden sind und $v_0 = v_k$ gilt.
    \end{definition}
\end{frame}

\begin{frame}
    \frametitle{Nachbarschaft und Grad}

    Sei $G = (V, E)$ ein Graph und $v \in V$.
    \begin{definition}[Nachbarschaft]
        Die \structure{Nachbarschaft $\Gamma(v)$} eines Knotens $v$ ist die Menge aller Knoten, die mit $v$ über eine Kante verbunden sind.
        \begin{align}
            \Gamma(v) = \left\{ u \in V \mid \left\{ v, u \right\} \in E \right\}
        \end{align}
    \end{definition}

    \vfill

    \begin{definition}[Grad]
        Der \structure{Grad $\deg(v)$} bezeichnet die Anzahl der Nachbarn von $v$.
        \begin{align}
            \deg(v) = \abs{\Gamma(v)}
        \end{align}
        Aus $v$ führen genau $\deg(v)$ Kanten heraus.
    \end{definition}

    \vfill

    \begin{definition}[$k$-regulär]
        Haben alle Knoten in $G$ den Grad $k$, so nennen wir $G$ \structure{$k$-regulär}.
    \end{definition}
\end{frame}

\begin{frame}
    \frametitle{Erreichbarkeit und Zusammenhang}

    Sei $G = (V, E)$ ein Graph.
    \begin{definition}[Erreichbarkeit]
        Ein Knoten $u \in V$ ist von $v \in V$ \structure{erreichbar}, wenn es in $G$ einen Pfad von $u$ nach $v$ gibt.
    \end{definition}

    \begin{definition}[Zusammenhangskomponente]
        Eine \structure{Zusammenhangskomponente} ist eine \alert{maximale} Teilmenge von Knoten in der sich alle Knoten erreichen.\\
        $G$ heißt \structure{zusammenhängend}, wenn nur eine solche Komponente existiert.
    \end{definition}

    \begin{example}[]
        \vspace{.5em}
        \begin{columns}[c]
            \begin{column}{.50\textwidth}
                \begin{itemize}
                    \item $G$ hat zwei Komponenten
                        \begin{align}
                            &\alert{\left\{ v_1, v_2, v_3, v_4, v_5 \right\}},\\
                            &\structure{\left\{ v_6, v_7 \right\}}
                        \end{align}
                    \item $G$ ist nicht zusammenhängend
                \end{itemize}
            \end{column}
            \begin{column}{.45\textwidth}
                \begin{tikzpicture}[]
                    \tikzstyle{vertex} = [pretty]
                    \tikzstyle{edge} = [draw, thick, -]

                    % This is _really_ ugly!
                    \draw[thick, rounded corners, tumred, fill=tumred!20]
                        (-.5, 0) -- (0.9, 1.4) -- (2.9, 1.4) -- (2.9, 0.8) -- (0.7, -1.4) -- (-.5, -1.4) -- cycle;
                    \draw[thick, rounded corners, tumblue, fill=tumblue!20]
                        (2, -1.4) -- (2, -1) -- (3.2, 0.4) -- (3.9, 0.4) -- (3.9, -0.2) -- (2.9, -1.4) -- cycle;

                    \draw[small]
                        (0, 0) node[vertex] (v1) {$v_1$}
                        (1, 1) node[vertex] (v2) {$v_2$}
                        (2.5, 1) node[vertex] (v3) {$v_3$}
                        (0, -1) node[vertex] (v4) {$v_4$}
                        (1.5, 0) node[vertex] (v5) {$v_5$}
                        (2.5, -1) node[vertex] (v6) {$v_6$}
                        (3.5, 0) node[vertex] (v7) {$v_7$};

                    \draw[edge]
                        (v1) -- (v2)
                        (v1) -- (v4)
                        (v1) -- (v5)
                        (v2) -- (v3)
                        (v4) -- (v5)
                        (v6) -- (v7);

                \end{tikzpicture}
            \end{column}
        \end{columns}
    \end{example}
\end{frame}

\begin{frame}
    \frametitle{Baum}

    \begin{definition}[Baum]
        Ein ungerichteter Graph heißt \structure{Baum}, falls er zusammenhängend und kreisfrei ist.
    \end{definition}
    \begin{definition}[Wald]
        Ein ungerichteter Graph heißt \structure{Wald}, wenn seine Zusammenhangskomponenten Bäume sind.
    \end{definition}
    \begin{itemize}
        \item Wir nennen Knoten von Grad 1 \structure{Blätter}
        \item Alle anderen Knoten heißen \structure{innere Knoten}
    \end{itemize}

    \vfill

    \begin{example}[]
        \centering
        \begin{tikzpicture}[]
            \tikzstyle{every node} = [pretty];

            \draw
                (4, 0)
                +(0, 0) node (a) {}
                +(0, -1) node (b) {}
                +(0, 1) node (c) {}
                +(-1, 0) node (d) {}
                +(1, 0) node (e) {}
                (6, -0.5)
                +(0, 0) node (f) {}
                +(1, 1) node (g) {}
                +(2, 1) node (h) {}
                +(1, 0) node (i) {}
                +(2, 0) node (j) {}
                +(3, 1) node (k) {}
                (0, 0)
                +(0, 0) node (l) {}
                (1, 0)
                +(0, 0) node (m) {}
                +(1, 0) node (n) {};

            \draw[thick]
                (a) -- (b)
                (a) -- (c)
                (a) -- (d)
                (a) -- (e)
                (f) -- (g)
                (g) -- (h)
                (g) -- (i)
                (h) -- (j)
                (h) -- (k)
                (m) -- (n);
        \end{tikzpicture}
    \end{example}
\end{frame}
}

\defineUnit{pruefercode}{%
\begin{frame}[c]
    \frametitle{Prüfercode}

    \begin{block}{Prüfercode}
        Der \structure{Prüfer-Code} zu einem Baum $T = (V, E)$ mit Knotenmenge $V = [n]$ ist ein $(n-2)$-Tupel mit Elementen aus $V$.\\
        Es gilt
        \begin{itemize}
            \item Jedem Baum kann genau ein Prüfer-Code zugeordnet werden
            \item Jeder Prüfer-Code stellt genau einen Baum dar
        \end{itemize}
        Damit wird eine Bijektion zwischen Tupeln und Bäumen definiert.
    \end{block}

    \begin{theorem}[Satz von Cayley]
        Es gibt genau $n^{n-2}$ Bäume mit n Knoten.
    \end{theorem}
\end{frame}

\renewcommand{\algorithmiccomment}[1]{\hfill \structure{##1}}
\begin{frame}
    \frametitle{Prüfercode}

    \begin{block}{Baum $\to$ Code}
        Gegeben ein Baum $T = (V, E)$ mit $\abs{V} = n$, finde Code $(c_1, \dots, c_{n-2})$.
        \vspace{.5em}
        \begin{algorithmic}
            \For{$i \gets 1, n-2 $}
                \State $m \gets \min \left\{ v \in V \mid v \text{ ist Blatt} \right\}$ \Comment{Finde kleinstes Blatt}
                \State $V \gets V \setminus \left\{ m \right\}$ \Comment{Entferne es aus $T$}
                \State $c_i \gets \text{parent}(m)$ \Comment{Addiere seinen Vater zum Code}
            \EndFor
        \end{algorithmic}
    \end{block}

    \begin{block}{Code $\to$ Baum}
        Gegeben ein Code $(c_1, \dots, c_{n-2})$, finde Baum $T = (V, E)$.
        \vspace{.5em}
        \begin{algorithmic}
            \State $V \gets [n]$ \Comment{$n$ Knoten}
            \State $E \gets \emptyset$ \Comment{Keine Kanten}
            \State $M \gets \emptyset$ \Comment{Keine markierten Knoten}
            \For{$i \gets 1, n-2$}
                \State $X_i \gets \left\{ c_i, \dots, c_{n-2} \right\} \cup M$ \Comment{Finde unmögliche Knoten}
                \State $v_i \gets \min \left( [n] \setminus X_i \right)$ \Comment{Finde kleinsten möglichen Knoten}
                \State $E \gets E \cup \left\{ \left\{ c_i, v_i \right\} \right\}$ \Comment{Füge Kante $\left\{ c_i, v_i \right\}$ hinzu}
                \State $M \gets M \cup \left\{ v_i \right\}$ \Comment{Markiere $v_i$}
            \EndFor
            \State $E \gets E \cup \left( V \setminus M \right)$ \Comment{Verbinde die 2 unmarkierten Knoten}
        \end{algorithmic}
    \end{block}
\end{frame}
}

\defineUnit{gradfolgen}{%
\begin{frame}
    \frametitle{Gradfolge}

    \begin{definition}[Gradfolge]
        Sei $G=(V, E)$ ein ungerichteter einfacher Graph mit $\abs{V} = n$.\\
        Seine \structure{Gradfolge} ist ein $n$-Tupel, das seine Grade enthält.
        \begin{align}
            \left( \deg(v_1), \deg(v_2), \dots, \deg(v_n) \right)
        \end{align}
        Üblicherweise werden Gradfolgen \alert{aufsteigend} sortiert.
    \end{definition}

    \vfill

    \begin{example}[]
        \vspace{.5em}
        \begin{columns}[c]
            \begin{column}{.45\textwidth}
                \begin{itemize}
                    \item $\abs{V} = 7$
                    \item Gradfolge $\left( 1, 1, 1, 2, 2, 2, 3 \right)$
                \end{itemize}
            \end{column}
            \begin{column}{.45\textwidth}
                \centering
                \begin{tikzpicture}[small]
                    \tikzstyle{vertex} = [pretty]
                    \tikzstyle{one} = [vertex, tumblue, fill=tumblue!20]
                    \tikzstyle{two} = [vertex, tumred, fill=tumred!20]
                    \tikzstyle{three} = [vertex, tumgreen, fill=tumgreen!30]
                    \tikzstyle{edge} = [draw, thick, -]

                    \draw (0, 0)
                        +(0, 0) node[three] (v1) {$3$}
                        +(1, 1) node[two] (v2) {$2$}
                        +(2.5, 1) node[one] (v3) {$1$}
                        +(0, -1) node[two] (v4) {$2$}
                        +(1.5, 0) node[two] (v5) {$2$}
                        (2.5, -1) node[one] (v6) {$1$}
                        (3.5, 0) node[one] (v7) {$1$};

                    \draw[edge]
                        (v1) -- (v2)
                        (v1) -- (v4)
                        (v1) -- (v5)
                        (v2) -- (v3)
                        (v4) -- (v5)
                        (v6) -- (v7);
                \end{tikzpicture}
            \end{column}
        \end{columns}
    \end{example}
\end{frame}
}

\defineUnit{spannbaeume}{%
\begin{frame}
    \frametitle{Teilgraph}

    \begin{definition}[Teilgraph]
        Seien $G = (V, E)$ und $G^\prime = (V^\prime, E^\prime)$ Graphen.\\
        Zu $G$ heißt $G^\prime$
        \begin{description}[Induzierter Teilgraph]
            \item[Teilgraph] wenn $V^\prime \subseteq V$ und $E^\prime \subseteq E$.
            \item[Induzierter Teilgraph] wenn $V^\prime \subseteq V$ und $E^\prime = \binom{V^\prime}{2} \cap E$.
        \end{description}
    \end{definition}

    \begin{itemize}
        \item Der induzierte Teilgraph ist der zu einer Knotenmenge kantenmaximale Teilgraph.
    \end{itemize}

    \begin{example}[]
        \vspace{.5em}
        \begin{columns}[c]
            \begin{column}{.45\textwidth}
                \begin{itemize}
                    \item Petersen-Graph $G$
                    \item Induzierter Teilgraph \alert{$G^\prime$}
                \end{itemize}
            \end{column}
            \begin{column}{.45\textwidth}
                \centering
                \begin{tikzpicture}[]
                    \tikzstyle{vertex} = [pretty]
                    \tikzstyle{blue} = []
                    \tikzstyle{red} = [fill=tumred!20]

                    \foreach \name/\angle/\dist/\col in {
                        ia/18/0.8/red, ib/90/0.8/blue, ic/162/0.8/red, id/234/0.8/blue, ie/306/0.8/red,
                        oa/18/1.6/red, ob/90/1.6/blue, oc/162/1.6/blue, od/234/1.6/blue, oe/306/1.6/red} {
                        \node[vertex,\col] (\name) at (\angle:\dist) {};
                    }

                    \foreach \from/\to in {
                        ic/ie, ia/ic,
                        ie/oe, ia/oa, oe/oa} {
                        \draw[line width=2pt, tumred!80] (\from) -- (\to);
                    }

                    \foreach \from/\to in {
                        ia/oa, ib/ob, ic/oc, id/od, ie/oe,
                        oa/ob, ob/oc, oc/od, od/oe, oe/oa,
                        ia/ic, ic/ie, ie/ib, ib/id, id/ia} {
                        \draw[thick] (\from) -- (\to);
                    }
                \end{tikzpicture}
            \end{column}
        \end{columns}
    \end{example}
\end{frame}

\begin{frame}
    \frametitle{Spannbaum}

    \begin{definition}[Spannbaum]
        Ein Teilgraph $T^\prime = \left( V^\prime, E^\prime \right)$ heißt \structure{Spannbaum} von $G = \left( V, E \right)$ wenn $T^\prime$ ein \alert{Baum} ist und $\alert{\abs{V^\prime} = \abs{V}}$ gilt.
    \end{definition}
    \begin{itemize}
        \item Spannbäume sind nicht eindeutig
        \item Jeder zusammenhängende Graph hat mindestens einen Spannbaum
    \end{itemize}

    \vfill

    \begin{example}[]
        \vspace{.5em}
        \centering
        \begin{columns}[c]
            \begin{column}{.45\textwidth}
                \centering
                \begin{tikzpicture}[]
                    \tikzstyle{vertex} = [pretty]
                    \tikzstyle{blue} = []
                    \tikzstyle{red} = [fill=tumred!20]

                    \foreach \name/\angle/\dist in {
                        ia/18/0.8, ib/90/0.8, ic/162/0.8, id/234/0.8, ie/306/0.8,
                        oa/18/1.6, ob/90/1.6, oc/162/1.6, od/234/1.6, oe/306/1.6} {
                        \node[vertex] (\name) at (\angle:\dist) {};
                    }

                    \foreach \from/\to in {
                        ia/oa, ib/ob, ic/oc, id/od, ie/oe,
                        oa/ob, ob/oc, oc/od, od/oe, oe/oa,
                        ia/ic, ic/ie, ie/ib, ib/id, id/ia} {
                        \draw[thick] (\from) -- (\to);
                    }

                    \foreach \from/\to in {
                        ia/oa, ib/ob, ic/oc, id/od, ie/oe,
                        od/oc, oa/oe, ie/ib, id/ib} {
                        \draw[very thick, tumred] (\from) -- (\to);
                    }
                \end{tikzpicture}
            \end{column}
            \begin{column}{.45\textwidth}
                \centering
                \begin{tikzpicture}[]
                    \tikzstyle{vertex} = [pretty]
                    \tikzstyle{blue} = []
                    \tikzstyle{red} = [fill=tumred!20]

                    \foreach \name/\angle/\dist in {
                        ia/18/0.8, ib/90/0.8, ic/162/0.8, id/234/0.8, ie/306/0.8,
                        oa/18/1.6, ob/90/1.6, oc/162/1.6, od/234/1.6, oe/306/1.6} {
                        \node[vertex] (\name) at (\angle:\dist) {};
                    }

                    \foreach \from/\to in {
                        ia/oa, ib/ob, ic/oc, id/od, ie/oe,
                        oa/ob, ob/oc, oc/od, od/oe, oe/oa,
                        ia/ic, ic/ie, ie/ib, ib/id, id/ia} {
                        \draw[thick] (\from) -- (\to);
                    }

                    \foreach \from/\to in {
                        ia/ic, ic/ie, ie/ib, ib/id, id/od,
                        od/oc, oc/ob, ob/oa, oa/oe} {
                        \draw[very thick, tumred] (\from) -- (\to);
                    }
                \end{tikzpicture}
            \end{column}
        \end{columns}
    \end{example}
\end{frame}
}

\defineUnit{eulertouren}{%
\begin{frame}
    \frametitle{Euler-Tour}

    \begin{definition}[Euler-Tour]
        Eine \structure{Euler-Tour} in einem Graphen ist ein Weg, der jede Kante \alert{genau einmal} enthält und dessen Anfangs- und Endknoten identisch sind.\\
        Ein Graph, der eine Euler-Tour besitzt, heißt \structure{eulersch}.
    \end{definition}

    \begin{theorem}[Euler]
        Ein zusammenhängender Graph besitzt genau dann eine \structure{Euler-Tour}, wenn alle Knoten des Graphen \alert{geraden Grad} haben.
    \end{theorem}

    \vfill

    \begin{example}[]
        \vspace{.5em}
        \begin{columns}[c]
            \begin{column}{.45\textwidth}
                \begin{itemize}
                    \item Eulertour
                        \begin{align}
                            ( &v_1, v_2, v_4, v_5, v_2, v_3,\\&v_4, v_1, v_6, v_3, v_1)
                        \end{align}
                \end{itemize}
            \end{column}
            \begin{column}{.45\textwidth}
                \centering
                \begin{tikzpicture}[small]
                    \tikzstyle{vertex} = [pretty]
                    % see http://tex.stackexchange.com/q/141378
                    \tikzset{edge/.style={
                            postaction={
                                decorate,
                                decoration={
                                    markings,
                                    mark=between positions 0 and \pgfdecoratedpathlength step 0.5pt with {
                                        \pgfmathsetmacro\myval{multiply(divide(
                                            \pgfkeysvalueof{/pgf/decoration/mark info/distance from start}, \pgfdecoratedpathlength),100)};
                                        \pgfsetfillcolor{tumblue!\myval!tumgreen};
                                        \pgfpathcircle{\pgfpointorigin}{.8pt};
                                        \pgfusepath{fill};}
                                }}}}

                    \draw (0, 0)
                        +(1, 1) node[vertex] (v1) {$v_1$}
                        +(-1, 1) node[vertex] (v2) {$v_2$}
                        +(1, -1) node[vertex] (v3) {$v_3$}
                        +(-1, -1) node[vertex] (v4) {$v_4$}
                        +(-2, 0) node[vertex] (v5) {$v_5$}
                        +(2, 0) node[vertex] (v6) {$v_6$};

                    \draw[edge]
                        (v1) -- (v2) -- (v4) -- (v5) -- (v2) --
                        (v3) -- (v4) -- (v1) -- (v6) -- (v3) --
                        (v1);

                    % Just draw the nodes again to fix the overlap
                    \draw (0, 0)
                        +(1, 1) node[vertex] (v1) {$v_1$}
                        +(-1, 1) node[vertex] (v2) {$v_2$}
                        +(1, -1) node[vertex] (v3) {$v_3$}
                        +(-1, -1) node[vertex] (v4) {$v_4$}
                        +(-2, 0) node[vertex] (v5) {$v_5$}
                        +(2, 0) node[vertex] (v6) {$v_6$};
                \end{tikzpicture}
            \end{column}
        \end{columns}
    \end{example}
\end{frame}
}

\defineUnit{gerichtetegraphen}{%
\begin{frame}
    \frametitle{Gerichteter Graph}

    \begin{definition}[Gerichteter Graph]
        Ein (einfacher) \structure{gerichteter Graph $G = (V, E)$} ist ein Zweitupel aus \structure{Knotenmenge $V$} und \structure{Kantenmenge $E \subseteq V \times V$}.\\
        Dabei bezeichnet ein Tupel $(v_1, v_2) \in E$ eine Kante von $v_1$ nach $v_2$.
    \end{definition}
    \begin{itemize}
        \item Schleifen sind erlaubt
        \item Kanten in beide Richtungen sind erlaubt
    \end{itemize}

    \vfill

    \begin{example}[]
        \vspace{.5em}
        \begin{columns}[c]
            \begin{column}{.45\textwidth}
                \begin{align}
                    G &= (V, E) \\
                    V &= \left\{ v_1, v_2, v_3, v_4, v_5, v_6, v_7 \right\} \\
                    E &= \{ \left( 1, 1 \right), \left( 1, 2 \right), \left( 2, 3 \right),\\
                        &\qquad\!\left( 2, 3 \right), \left( 3, 2 \right), \left( 1, 5 \right),\\
                        &\qquad\!\left( 4, 1 \right), \left( 5, 4 \right), \left( 6, 7 \right),\\
                        &\qquad\!\left( 7, 6 \right)\}
                \end{align}
            \end{column}
            \begin{column}{.45\textwidth}
                \begin{tikzpicture}[small]
                    \tikzstyle{vertex} = [pretty]
                    \tikzstyle{every edge} = [edge, thick]

                    \draw (0, 0)
                        +(0, 0) node[vertex] (v1) {$v_1$}
                        +(1, 1) node[vertex] (v2) {$v_2$}
                        +(2.5, 1) node[vertex] (v3) {$v_3$}
                        +(0, -1) node[vertex] (v4) {$v_4$}
                        +(1.5, 0) node[vertex] (v5) {$v_5$}
                        (2.5, -1) node[vertex] (v6) {$v_6$}
                        (3.5, 0) node[vertex] (v7) {$v_7$};

                    \draw[]
                        (v1) edge[loop left] (v1)
                        (v1) edge (v2)
                        (v2) edge[bend left] (v3)
                        (v3) edge[bend left] (v2)
                        (v1) edge (v5)
                        (v4) edge (v1)
                        (v5) edge (v4)
                        (v6) edge[bend left] (v7)
                        (v7) edge[bend left] (v6);
                \end{tikzpicture}
            \end{column}
        \end{columns}
    \end{example}
\end{frame}
}

\defineUnit{graphfaerbung}{%
\begin{frame}
    \frametitle{Graphenfärbung}

    \begin{definition}[$k$-Färbbarkeit]
        Ein Graph $G = (V, E)$ heißt \structure{$k$-färbbar}, wenn es eine Abbildung $f : V \to [k]$ gibt, sodass
        \begin{align}
            \forall v \in V\; \forall w \in \alert{\Gamma(v)}.\; f(v) \alert{\neq} f(w)
        \end{align}
        Die \structure{chromatische Zahl $\chi(G)$} ist das kleinste $k$, sodass $G$ $k$-färbbar ist.
    \end{definition}

    \begin{itemize}
        \item Ordne jedem Knoten eine Farbe zu
        \item Benachbarte Knoten haben unterschiedliche Farben
    \end{itemize}

    \vfill

    \begin{example}[]
        \vspace{.5em}
        \centering
        \begin{columns}[c]
            \begin{column}{.35\textwidth}
                \begin{itemize}
                    \item $G$ ist 3-färbbar
                    \item $G$ ist auch 4-färbbar
                    \item $\chi(G) = 3$
                \end{itemize}
            \end{column}
            \begin{column}{.55\textwidth}
                \centering
                \begin{tikzpicture}[]
                    \tikzstyle{vertex} = [pretty]
                    \tikzstyle{blue} = [fill=tumblue]
                    \tikzstyle{red} = [fill=tumred]
                    \tikzstyle{green} = [fill=tumgreen]

                    \foreach \name/\angle/\dist/\col in {
                        ia/18/0.8/red, ib/90/0.8/red, ic/162/0.8/blue, id/234/0.8/blue, ie/306/0.8/green,
                        oa/18/1.6/green, ob/90/1.6/blue, oc/162/1.6/red, od/234/1.6/green, oe/306/1.6/blue} {
                        \node<1>[vertex] (\name) at (\angle:\dist) {};
                        \node<2>[vertex, \col] (\name) at (\angle:\dist) {};
                    }

                    \foreach \from/\to in {
                        ia/oa, ib/ob, ic/oc, id/od, ie/oe,
                        oa/ob, ob/oc, oc/od, od/oe, oe/oa,
                        ia/ic, ic/ie, ie/ib, ib/id, id/ia} {
                        \draw[thick] (\from) -- (\to);
                    }
                \end{tikzpicture}
            \end{column}
        \end{columns}
    \end{example}
\end{frame}
}

\defineUnit{planaritaet}{%
\begin{frame}
    \frametitle{Bipartitheit}

    \begin{definition}[Bipartiter Graph]
        Ein Graph $G = (V, E)$ heißt \structure{bipartit} gdw.\ es eine Partitionierung $V = V_1 \uplus V_2$ gibt, sodass jede Kante zwei Knoten in \alert{unterschiedlichen Klassen} verbindet.
        \begin{align}
            \forall \left\{ v_1, v_2 \right\} \in E.\; v_1 \in V_1 \wedge v_2 \in V_2
        \end{align}
    \end{definition}

    \begin{itemize}
        \item $G$ ist bipartit gdw. $\chi(G)= 2$
    \end{itemize}

    \vfill

    \begin{example}[]
        \vspace{.5em}
        \begin{columns}
            \begin{column}{.5\textwidth}
                \centering
                \begin{tikzpicture}[x=2em, y=2em]
                    \tikzstyle{set} = [rectangle, rounded corners, draw, fill, inner sep=5pt]
                    \tikzstyle{vertex} = [pretty]

                    \draw (0, 0)
                    +(0, 0) node[vertex] (a1) {}
                    +(0, 2) node[vertex] (a2) {}

                    (2, 0)
                    +(0, -1) node[vertex] (b1) {}
                    +(0, 1) node[vertex] (b2) {}
                    +(0, 3) node[vertex] (b3) {}

                    (0, 0)
                    +(0, -2) node {$V_1$}
                    (2, 0)
                    +(0, -2) node {$V_2$};

                    \draw[thick]
                        (a1) -- (b1)
                        (a1) -- (b3)
                        (a2) -- (b2)
                        (a2) -- (b3);

                    \begin{pgfonlayer}{background}
                        \node[set, tumblue, fill=tumblue!20, fit=(b1.south east) (b3.north west)] {};
                        \node[set, tumred, fill=tumred!20, fit=(b1.south east) (b3.north west), shift={(-2, 0)}] {};
                    \end{pgfonlayer}
                \end{tikzpicture}
            \end{column}
            \begin{column}{.5\textwidth}
                \centering
                \begin{tikzpicture}[x=2em, y=2em]
                    \tikzstyle{set} = [rectangle, rounded corners, draw, fill, inner sep=5pt]
                    \tikzstyle{vertex} = [pretty]

                    \draw (0, 0)
                    +(0, -1) node[vertex] (a1) {}
                    +(0, 1) node[vertex] (a2) {}
                    +(0, 3) node[vertex] (a3) {}

                    (2, 0)
                    +(0, -1) node[vertex] (b1) {}
                    +(0, 1) node[vertex] (b2) {}
                    +(0, 3) node[vertex] (b3) {}

                    (1, 0)
                    +(0, -2) node {$K_{3,3}$};

                    \draw[thick]
                        (a1) -- (b1)
                        (a1) -- (b2)
                        (a1) -- (b3)
                        (a2) -- (b1)
                        (a2) -- (b2)
                        (a2) -- (b3)
                        (a3) -- (b1)
                        (a3) -- (b2)
                        (a3) -- (b3);

                    \begin{pgfonlayer}{background}
                        \node[set, tumblue, fill=tumblue!20, fit=(b1.south east) (b3.north west)] {};
                        \node[set, tumred, fill=tumred!20, fit=(b1.south east) (b3.north west), shift={(-2, 0)}] {};
                    \end{pgfonlayer}
                \end{tikzpicture}
            \end{column}
        \end{columns}
    \end{example}
\end{frame}

\begin{frame}
    \frametitle{Planarität}

    \begin{definition}[Planarität]
        Ein Graph heißt \structure{planar}, wenn er so in eine Ebene gezeichnet werden kann, dass sich keine Kanten schneiden.
    \end{definition}

    \begin{theorem}[Kuratowski]
        Ein Graph ist genau dann \structure{nicht planar}, wenn er einen Teilgraphen enthält, der eine \alert{Unterteilung} des \alert{$K_5$} oder des \alert{$K_{3, 3}$} ist.
    \end{theorem}

    \begin{example}[]
        \begin{columns}[T]
            \begin{column}{.5\textwidth}
                \centering
                Planar\\
                \vspace{1em}
                \begin{tikzpicture}[]
                    \tikzstyle{edge} = [draw, thick, -]
                    \tikzstyle{vertex} = [pretty]

                    \foreach \name/\angle/\dist in {
                        ia/18/0.6, ib/90/0.6, ic/162/0.6, id/234/0.6, ie/306/0.6,
                        oa/18/1.2, ob/90/1.2, oc/162/1.2, od/234/1.2, oe/306/1.2} {
                        \node[vertex] (\name) at (\angle:\dist) {};
                    }

                    \foreach \from/\to in {
                        ia/ib, ib/ic, ic/id, id/ie, ie/ia,
                        oa/ob, ob/oc, oc/od, od/oe, oe/oa,
                        ia/oa, ib/ob, ic/oc, id/od, ie/oe} {
                        \draw[edge] (\from) -- (\to);
                    }
                \end{tikzpicture}
                \vspace{.5em}
            \end{column}
            \begin{column}{.5\textwidth}
                \centering
                Nicht planar\\
                \vspace{1em}
                \begin{tikzpicture}
                    \tikzstyle{edge} = [draw, thick, -]
                    \tikzstyle{vertex} = [pretty]

                    \path[use as bounding box]
                        (0, 1) -- (4, 1) -- (4, -1.5) -- cycle;

                    \draw (0, 0)
                    +(0, -1) node[vertex] (a1) {}
                    +(0, 0) node[vertex] (a2) {}
                    +(0, 1) node[vertex] (a3) {}

                    (1, 0)
                    +(0, -1) node[vertex] (b1) {}
                    +(0, 0) node[vertex] (b2) {}
                    +(0, 1) node[vertex] (b3) {}

                    (0.5, 0)
                    +(0, -1.5) node {$K_{3,3}$}
                    (3, 0)
                    +(0, -1.5) node {$K_{5}$};

                    \draw[thick]
                        (a1) -- (b1)
                        (a1) -- (b2)
                        (a1) -- (b3)
                        (a2) -- (b1)
                        (a2) -- (b2)
                        (a2) -- (b3)
                        (a3) -- (b1)
                        (a3) -- (b2)
                        (a3) -- (b3);

                    \foreach \name/\angle/\dist in {
                        fa/18/.85, fb/90/.85, fc/162/.85, fd/234/.85, fe/306/.85} {
                        \draw
                        (3, 0)
                        +(\angle:\dist) node[vertex] (\name) {};
                    }

                    \foreach \a/\b in {
                        fa/fb, fa/fc, fa/fd, fa/fe,
                        fb/fc, fb/fd, fb/fe,
                        fc/fd, fc/fe,
                        fd/fe} {
                        \draw[edge] (\a) -- (\b);
                    }
                \end{tikzpicture}
                \vspace{.5em}
            \end{column}
        \end{columns}
    \end{example}
\end{frame}

\begin{frame}
    \frametitle{Eulersche Polyederformel}

    \begin{theorem}[Eulersche Polyederformel]
        Für einen zusammenhängenden planaren Graphen $G = (V, E)$ gilt
        \begin{align}
            \structure{\abs{F} - \abs{E} + \abs{V} - 2 = 0}
        \end{align}
        Dabei ist $\abs{F}$ die Anzahl von Flächen inklusive der äußeren Fläche.
    \end{theorem}

    \vfill

    \begin{example}[]
        \vspace{.5em}
        \centering
        \begin{columns}[c]
            \begin{column}{.45\textwidth}
                \centering
                \begin{tikzpicture}[x=3em, y=3em, clip]
                    \tikzstyle{edge} = [draw, thick, -]
                    \tikzstyle{vertex} = [pretty, fill=tumblue!30]

                    \foreach \name/\angle/\dist in {
                        ia/18/0.8, ib/90/0.8, ic/162/0.8, id/234/0.8, ie/306/0.8,
                        oa/18/1.6, ob/90/1.6, oc/162/1.6, od/234/1.6, oe/306/1.6} {
                        \node[vertex] (\name) at (\angle:\dist) {};
                    }

                    \foreach \from/\to in {
                        ia/ib, ib/ic, ic/id, id/ie, ie/ia,
                        oa/ob, ob/oc, oc/od, od/oe, oe/oa,
                        ia/oa, ib/ob, ic/oc, id/od, ie/oe} {
                        \draw[edge] (\from) -- (\to);
                    }

                    \begin{pgfonlayer}{background}
                        \tikzstyle{area} = [draw, fill]
                        \tikzstyle{green} = [area, tumgreen, fill=tumgreen!60]
                        \tikzstyle{red} = [area, tumred, fill=tumred!60]
                        \tikzstyle{blue} = [area, tumblue, fill=tumblue!60]
                        \tikzstyle{ivory} = [area, tumivory, fill=tumivory!60]

                        \node[blue, thick, dashed, fit=(oa)(ob)(oc)(od)(oe)] {};
                        \path[green]
                        (ia.center) -- (ib.center) -- (ob.center) -- (oa.center) -- cycle
                        (ic.center) -- (id.center) -- (od.center) -- (oc.center) -- cycle;

                        \path[red]
                        (ic.center) -- (ib.center) -- (ob.center) -- (oc.center) -- cycle
                        (ie.center) -- (id.center) -- (od.center) -- (oe.center) -- cycle;

                        \path[ivory]
                        (ia.center) -- (ie.center) -- (oe.center) -- (oa.center) -- cycle;

                        \path[blue]
                        (ia.center) -- (ib.center) -- (ic.center) -- (id.center) -- (ie.center) -- cycle;
                    \end{pgfonlayer}
                \end{tikzpicture}
            \end{column}
            \begin{column}{.45\textwidth}
                \begin{itemize}
                    \item $\abs{V} = 10$
                    \item $\abs{E} = 15$
                    \item $\abs{F} = 7$
                \end{itemize}
            \end{column}
        \end{columns}
    \end{example}
\end{frame}
}