view planarity/presentation.tex @ 168:cc6bb3ca79fb default tip

6/4 is not 2
author Markus Kaiser <markus.kaiser@in.tum.de>
date Fri, 28 Nov 2014 01:41:50 +0100
parents 4e3e078f5338
children
line wrap: on
line source

\documentclass[compress]{beamer}
%,hyperref={pdfpagelabels=false}

\usepackage[ngerman,english]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{amsfonts}
\usepackage{helvet}
\usepackage{url}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{xspace} % Abstand hinter Variablennamen
\usepackage{fix-cm}
\usepackage{tikz}
%\usepackage[square, sort, numbers, authoryear]{natbib}

\usepackage{beamerthemeLEA2}

%\bibliographystyle{plainnat}

\newcommand{\N}       {\mathbb{N}}          % natürliche Zahlen
\newcommand{\Z}       {\mathbb{Z}}          % ganze Zahlen
\newcommand{\R}       {\mathbb{R}}          % reelle Zahlen
\newcommand{\Prob}    {\mathrm{P}}          % Wahrscheinlichkeit
\newcommand{\inter}   {\cap}                % Schnittmenge
\newcommand{\union}   {\cup}                % Vereinigung
\newcommand{\Oh}      {\mathcal{O}}         % O-Notation (Landau-Symbole)
\newcommand{\mycite}[1]{\textcolor{tumgreen}{[#1]}}

\newenvironment{changemargin}[2]{%
    \begin{list}{}{%
            \setlength{\topsep}{0pt}%
            \setlength{\leftmargin}{#1}%
            \setlength{\rightmargin}{#2}%
            \setlength{\listparindent}{\parindent}%
        \setlength{\itemindent}{\parindent}%
            \setlength{\parsep}{\parskip}%
        }%
\item[]}{\end{list}}


\usetikzlibrary{shapes.geometric}
\pgfdeclarelayer{background}
\pgfdeclarelayer{midground}
\pgfsetlayers{background,midground,main}
\tikzstyle{vertex}=[circle,draw,fill=blue!25,minimum size=20pt,inner sep=0pt]
\tikzstyle{selected vertex} = [vertex, fill=red!50]
\tikzstyle{small vertex} = [vertex, minimum size=12pt]
\tikzstyle{edge} = [draw,thick,-]
\tikzstyle{tree edge} = [draw,very thick,->]
\tikzstyle{left edge} = [draw,thick,->, blue]
\tikzstyle{right edge} = [draw,thick,->, red]
\tikzstyle{back edge} = [draw,dashed,arrows={-latex}]
\tikzstyle{selected edge} = [draw,line width=5pt,-,red!50]


\title{Testen eines Graphen auf Planarität}
\subtitle{Proseminar ``Graph Drawing''}
\author{\href{mailto:markus.kaiser@in.tum.de}{Markus Kaiser}}
%\date{\today}
\date{2012-05-22}
\institute{Technische Universität München}
%Inhaltsverzeichnis zu Begin von jedem Abschnitt einblenden?
%\AtBeginSection[]{
%  \begin{frame}
%    \frametitle{Outline}
%    \tableofcontents[currentsection]
%  \end{frame}
%}
%\AtBeginSection[]{
%   \begin{frame}[plain]
%       \begin{center} \LARGE\insertsectionhead \end{center}
%   \end{frame}
%}

\begin{document}

\begin{frame}
    \titlepage
\end{frame}

% Inhaltsverzeichnis
%\begin{frame}
%  \frametitle{Inhalt}
%  \tableofcontents
%\end{frame}

\begin{frame}
    \frametitle{Grundlegendes}
    \begin{itemize}
        \item<1-> Graph $G$, Knotenmenge $V$, Kantenmenge $E$
        \item<1-> $G = (V, E)$
        \item<1-> $E \subseteq V^2$, $|V| = n$, $|E| = m$
            \vspace{1em}
        \item<2-> \alert{einfach}: Keine Schleifen oder Mehrfachkanten
        \item<2-> \alert{zusammenhängend}: Es existiert ein Pfad von jedem Knoten zu jedem Knoten
        \item<2-> \alert{Baum}: Zyklenfreier zusammenhängender Graph
        \item<2-> \alert{$k$-zusammenhängend}: Zusammenhängend nach Entfernen von $k-1$ Knoten
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{Grundlegendes}
    \begin{columns}[T]
        \begin{column}{.5\textwidth}
            \begin{itemize}
                \item<2> Artikulationsknoten \\(\emph{cut vertex})
                \item<3> Block
                \item<4> Pfad
                \item<5> Zyklus
                \item<6> Facette (\emph{face})
                \item<7> Bipartitheit
            \end{itemize}
        \end{column}
        \begin{column}{.5\textwidth}
            \begin{figure}
                \begin{tikzpicture}[auto]
                    \useasboundingbox (-2, 0) rectangle (7,7);

                    \foreach \pos/\name in {{(0,0)/a}, {(0,1.5)/b}, {(2,0)/c},{(2,1.5)/d},
                    {(-2,2.5)/e},
                    {(0,3.5)/f}, {(2,3.5)/g}, {(0,5)/h},{(2,5)/i},
                    {(1,6.5)/k}}
                    \node[vertex] (\name) at \pos {};

                    \foreach \source/ \dest in {a/b, a/c, c/d, b/d,
                        b/e, e/f,
                    f/g, f/h, h/i, g/i, h/k}
                    \path[edge] (\source) -- (\dest);
                    \path[edge] (g) .. controls (3, 5.5) .. (k);

                    \foreach \vertex / \fr in {e/2,
                        f/3, g/3, h/3, i/3, k/3,
                        a/4, b/4, e/4, f/4,
                        a/5, b/5, c/5, d/5,
                        a/7, d/7, e/7, g/7, h/7
                    }
                    \path<\fr> node[selected vertex] at (\vertex) {};

                    \begin{pgfonlayer}{background}
                        \foreach \source / \dest / \fr in {
                            f/g/3, f/h/3, h/i/3, g/i/3, h/k/3,
                            a/b/4, b/e/4, e/f/4,
                            a/b/5, b/d/5, c/d/5, c/a/5
                        }
                        \path<\fr>[selected edge] (\source) -- (\dest);
                        \path<3>[selected edge] (g) .. controls (3, 5.5) .. (k);

                        \fill<6>[red!50] (a.center) -- (b.center) -- (d.center) -- (c.center);
                        \draw<6> (1, 0.75) node {f};
                    \end{pgfonlayer}
                \end{tikzpicture}
            \end{figure}
            \vspace{1em}
        \end{column}
    \end{columns}
\end{frame}

\begin{frame}
    \frametitle{Planarität}
    \begin{itemize}
        \item \alert{offene Jordankurve}
            \vspace{0.2em}
            \begin{figure}
                \begin{tikzpicture}
                    \draw (0,0) .. controls (1,1) and (4,0.5) .. (3,1);

                    \draw (4,0) .. controls (5,1) .. (6,0.3) .. controls (7,0.5) .. (7,1);
                    \draw (6,0.3) .. controls (8,-0.5) and (3,0) .. (6,0.3);
                \end{tikzpicture}
            \end{figure}
            \vspace{1em}

        \item<2-> Eine \alert{Zeichnung} ordnet in $\R^2$ jedem Knoten Koordinaten und jeder Kante eine offene Jordankurve zu
        \item<2-> \alert{äquivalent}: Gleiche Reihenfolge der Kanten an Knoten
            \vspace{2em}
        \item<2-> \alert{planar}: Keine sich überschneidenden Kurven
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{Charakterisierung}

    \begin{theorem}
        Ein Graph ist genau dann planar wenn\ldots
        \begin{itemize}
            \item \alert{Kuratowski} (1930): er keinen Teilgraphen enthält der eine Unterteilung von $K_5$ oder $K_{3,3}$ ist.
            \item \alert{Wagner} (1937): er nicht $K_5$ oder $K_{3,3}$ als Minoren enthält.
        \end{itemize}
    \end{theorem}

    \begin{figure}
        \begin{tikzpicture}[auto]
            \foreach \pos/ \name in {{(0,1)/a}, {(1,1)/b}, {(2,1)/c},{(0,2)/d},{(1,2)/e},{(2,2)/f},
            {(4.164,1)/g}, {(5.464,1)/h}, {(5.626,1.986)/i},{(4.814,2.75)/j},{(4,1.986)/k}}
            \node[small vertex] (\name) at \pos {};

            \foreach \source/ \dest in {a/d, a/e, a/f,
                b/d, b/e, b/f,
                c/d, c/e, c/f,
                g/h, g/i, g/j, g/k,
                h/i, h/j, h/k,
                i/j, i/k,
            j/k}
            \path[edge] (\source) -- (\dest);

            \node at (1,0) {$K_{3,3}$};
            \node at (4.814,0) {$K_5$};
        \end{tikzpicture}
    \end{figure}
\end{frame}

\begin{frame}
    \frametitle{Vorüberlegungen}
    \begin{columns}[T]
        \begin{column}{.6\textwidth}
            \begin{itemize}
                \item<1,5> \alert{Schleifen} entfernen
                \item<1,5> \alert{Parallele Kanten} entfernen
                \item<2,5> \alert{Zusammenhangskomponenten} getrennt betrachten
                \item<3,5> \alert{Blöcke} getrennt betrachten
                \item<3,5> Knoten von \alert{Grad 1} entfernen
                \item<4,5> Knoten von \alert{Grad 2} durch Kanten ersetzen
            \end{itemize}

            \vspace{1.5em}
            \uncover<5>{Teilgraphen sind\ldots}
            \begin{itemize}
                \item<5> planar wenn $|E| < 9$ oder $|V| < 5$
                \item<5> nicht planar wenn $|E| > 3|V| - 6$
            \end{itemize}
        \end{column}
        \begin{column}{.4\textwidth}
            \begin{figure}
                \begin{tikzpicture}[auto]
                    \useasboundingbox (-1, -1) rectangle (7,7);

                    \node<1>[vertex] (t) at (2,5) {};
                    \node<1>[vertex] (s) at (2,2) {};
                    \path<1>[edge] (t) .. controls (1,6) and (3,6) .. (t);
                    \path<1>[edge] (s) .. controls (1.5,3.5) .. (t);
                    \path<1>[edge] (s) .. controls (2.5,3.5) .. (t);

                    \foreach \pos/\name in {{(0,0)/a}, {(0,2)/b}, {(2,0)/c},{(2,2)/d},
                    {(1,1)/e}}
                    \node<2>[vertex] (\name) at \pos {};

                    \foreach \pos/\name in {{(0,4)/f}, {(2,4)/g}, {(3,5)/h},{(2,6)/i},
                    {(0,6)/j}}
                    \node<2>[vertex, fill=red!25] (\name) at \pos {};

                    \foreach \source/ \dest in {a/b, a/c, c/d, b/d,
                    a/e, e/d, f/g, g/h, h/i, h/j, g/i}
                    \path<2>[edge] (\source) -- (\dest);

                    \foreach \pos/\name in {{(0,0)/a}, {(0,1.5)/b}, {(2,0)/c},{(2,1.5)/d}}
                    \node<3,5>[vertex] (\name) at \pos {};

                    \foreach \pos/\name in {{(0,3.5)/f}, {(2,3.5)/g}, {(0,5)/h},{(2,5)/i},
                    {(1,6.5)/k}}
                    \node<3,5>[vertex, fill=red!25] (\name) at \pos {};

                    \node<3,5>[vertex, fill=green!25] (e) at (-1,2.5) {};

                    \foreach \source/ \dest in {a/b, a/c, c/d, b/d,
                        b/e, e/f,
                    f/g, f/h, h/i, g/i, h/k}
                    \path<3,5>[edge] (\source) -- (\dest);
                    \path<3,5>[edge] (g) .. controls (3, 5.5) .. (k);

                    \foreach \pos/\name in {{(0,3)/a}, {(0,5)/b}, {(2,3)/c},{(2,5)/d}}
                    \node<4>[vertex] (\name) at \pos {};
                    \node<4>[vertex, fill=red!25] (e) at (1, 4) {};

                    \foreach \source/ \dest in {a/b, a/c, c/d, b/d,
                    a/e, e/d}
                    \path<4>[edge] (\source) -- (\dest);
                \end{tikzpicture}
            \end{figure}
            \vspace{1em}
        \end{column}
    \end{columns}
\end{frame}

\begin{frame}
    \frametitle{Algorithmen}
    \begin{itemize}
        \item \alert{Knotenbasiert}
            \begin{itemize}
                \item Ein Graph bleibt planar wenn man einzelne Knoten entfernt
                \item Prozess kann umgekehrt werden
            \end{itemize}
            \vspace{2em}
        \item \alert{Kreisbasiert}
            \begin{itemize}
                \item Nur Graphen mit Zyklen können nicht planar sein
                \item Zyklen trennen Ebene in zwei Bereiche
                \item Teilgraphen sind entweder innen oder außen
            \end{itemize}
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{LR-Algorithmus}

    \begin{itemize}
        \item Kreisbasiert
        \item \alert{Kantenweises} betrachten des Graphen
        \item Weiterentwicklung von \emph{Hopcroft und Tarjan} (1974)
            \vspace{2em}
        \item Original von \emph{de Fraysseix, Ossona de Mendez und
            Rosenstiehl} (2006)
        \item Beschrieben von \emph{Ulrik Brandes} (2009)
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{Tiefensuche}

    \begin{columns}[T]
        \begin{column}{.35\textwidth}
            \begin{itemize}
                \item Wurzel
                \item DFS-Baum
                \item Rückwärtskante
                \item Orientierung
                    \vspace{2em}
                \item<2> DFS-Index
                \item<2> strikt höher/tiefer
                \item<2> \alert{lowpoint}\\ $lowpt([5]) = 2$
            \end{itemize}
        \end{column}
        \begin{column}{.65\textwidth}
            \begin{figure}
                \begin{tikzpicture}[auto, scale=0.7]
                    \useasboundingbox (-2,0) rectangle (6,10);

                    \foreach \pos/\name in {{(0,0)/a},{(0,2)/b},{(-1,4)/c},{(-2,6)/d},{(0,6)/e},
                    {(-1,8)/f}, {(1,8)/g},
                    {(3,4)/h}, {(5,6)/i}, {(4,8)/j},{(6,8)/k}}
                    \node[vertex] (\name) at \pos {};

                    \path<1> node[selected vertex] at (a) {$r$};

                    \foreach \pos/\name in {{(0,2)/2},{(-1,4)/3},{(-2,6)/4},{(0,6)/5},
                    {(-1,8)/6}, {(1,8)/7},
                    {(3,4)/8}, {(5,6)/9}, {(4,8)/10},{(6,8)/11}}
                    \path<2> node[vertex] at \pos {$\name$};
                    \path<2> node[selected vertex] at (0,0) {$1$};

                    \foreach \source/ \dest in {a/b, b/c, c/d, c/e, e/f, e/g,
                    b/h, h/i, i/j, i/k}
                    \path[tree edge] (\source) -- (\dest);

                    \foreach \source/\dest/\ctrl in {{f/b/(2.5, 9.2)}, {g/c/(0.5,5)}, {d/a/(-2,2)},
                    {j/b/(4.5, 3)}, {k/b/(6,3)}}
                    \path[back edge] (\source) .. controls \ctrl .. (\dest);
                \end{tikzpicture}
            \end{figure}
            \vspace{1em}
        \end{column}
    \end{columns}
\end{frame}

\begin{frame}
    \frametitle{Beispiel}

    \begin{figure}
        \begin{tikzpicture}[auto, scale=1.3]
            \useasboundingbox (-4,0) rectangle (4,6);

            \foreach \pos/\name in {{(0,1)/a},{(0,2)/b},{(1,3)/c},{(0.75,4)/d},{(-0.5,4.5)/e},
            {(-1.5,3.5)/f}, {(1.25,5.25)/g},
            {(0,5.5)/h}, {(2.5,6)/i}, {(4,5)/j},{(2.5,4.5)/k},
            {(-2,6)/l}, {(-2.5,5)/m}, {(-4,5)/n}}
            \node[small vertex] (\name) at \pos {};


            \foreach \source/ \dest in {a/b, b/c, c/d, d/e, e/f, e/g,
                e/h, h/i, i/j, j/k,
            h/l, l/m, m/n}
            \path<1>[edge] (\source) -- (\dest);

            \foreach \source/ \dest in {a/b, b/c, c/d, d/e, e/f, e/g,
                e/h, h/i, i/j, j/k,
            h/l, l/m, m/n}
            \path<2->[tree edge] (\source) -- (\dest);

            \foreach \source/ \dest in {f/b, k/c, k/i, j/a, g/d, m/e, n/l, n/a}
            \path<1>[edge] (\source) -- (\dest);

            \foreach \source/ \dest in {f/b, k/c, k/i, j/a, g/d, m/e, n/l, n/a}
            \path<2>[back edge] (\source) -- (\dest);

            \foreach \source/ \dest in {f/b, m/e, n/a}
            \path<3>[left edge] (\source) -- (\dest);

            \foreach \source/ \dest in {k/c, k/i, j/a, g/d, n/l}
            \path<3>[right edge] (\source) -- (\dest);

            \draw<2> (0,0) node {DFS};
            \draw<3> (0,0) node {LR-Zerlegung};
        \end{tikzpicture}
    \end{figure}
\end{frame}

\begin{frame}
    \frametitle{LR-Zerlegung}

    \begin{itemize}
        \item Jede Rückwärtskante erzeugt einen \alert{Zyklus}
        \item LR-Zerlegung teilt Zyklen in solche im und gegen den Uhrzeigersinn
        \item Quelle \alert{außen}
        \item \alert{Verschachtelung} nur bei gleicher Orientierung
    \end{itemize}

    \begin{center}
        \begin{figure}
            \begin{tikzpicture}[auto]
                \useasboundingbox (-2, 0.5) rectangle (7, 5);

                \draw[edge] (0,0.5) -- (0,3);
                \draw[edge] (-1.5,4) -- (0,3) node[midway, above] {};
                \draw[edge] (1.5,4) -- (0,3) node[midway, above] {};

                \draw[left edge, rounded corners] (-1.5,4) .. controls (-0.5,1) .. (0,1);
                \draw[right edge] (1.5,4) .. controls (0.5,2) .. (0,2);


                \draw[edge] (4.5,0.5) -- (4.5,3);
                \draw[edge] (3,4) -- (4.5,3) node[midway, above] {};
                \draw[edge] (6,4) -- (4.5,3) node[midway, above] {};

                \draw[right edge, rounded corners] (3,4) .. controls (8.5,6) and (5.5,1) .. (4.5,1);
                \draw[right edge] (6,4) .. controls (5,2) .. (4.5,2);
            \end{tikzpicture}
        \end{figure}
    \end{center}
\end{frame}

\begin{frame}
    \frametitle{LR-Zerlegung}

    \begin{definition}
        Sei $G = (V, T \uplus B)$ ein \alert{DFS-orientierter} Graph. Eine Zerlegung $B = L \uplus R$ seiner Rückwärtskanten heißt \alert{LR-Zerlegung} wenn für jeden Knoten mit ausgehenden Kanten $e_1$, $e_2$ gilt:
        \begin{itemize}
            \item Alle Rückwärtskanten von $e_1$ mit ihrem Ende über $lowpt(e_2)$ gehören zur einen und
            \item Alle Rückwärtskanten von $e_2$ mit ihrem Ende über $lowpt(e_1)$ gehören zur anderen Klasse.
        \end{itemize}
    \end{definition}

    \begin{center}
        \begin{figure}
            \begin{tikzpicture}[auto, scale=0.5]
                \useasboundingbox (-4, 2) rectangle (4, 9);

                \node[small vertex] (u) at (0,3) {};
                \node[small vertex] (v) at (0,6) {$v$};
                \node[small vertex] (w) at (-2,8) {};
                \node[small vertex] (x) at (2,8) {};

                \path[edge] (u) -- (v);
                \path[edge, ->] (v) -- (w) node[midway, below] {$e_1$};
                \path[edge, ->] (v) -- (x) node[midway, below] {$e_2$};
                \path[edge] (0,2) -- (u);

                \draw[left edge] (w) .. controls (-2, 5) .. (u);
                \draw[right edge] (x) .. controls (2, 5) .. (u);
                \draw[back edge] (w) .. controls (-3, 5) .. (0,2);
                \draw[back edge] (x) .. controls (3, 5) .. (0,2);
            \end{tikzpicture}
        \end{figure}
    \end{center}
\end{frame}

\begin{frame}
    \frametitle{LR-Zerlegung}

    \begin{theorem}
        Ein Graph ist genau dann planar, wenn er eine \alert{LR-Zerlegung} zulässt.
    \end{theorem}

    \vspace{2em}

    \begin{itemize}
        \item Planare Zeichnung $\rightarrow$ LR-Zerlegung intuitiv
            \vspace{1em}
        \item Andere Richtung: Konstruktiv
        \item Probleme ergeben sich bei überlappenden Kreisen
        \item Welche Kreise liegen außen, welche innen?
        \item Bedingungen abhängig von Baumkanten
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{Verschachtelung}

    \begin{block}{Beobachtung}
        Die Baumkante $e_1$ muss außerhalb von Baumkante sein $e_2$ wenn
        \begin{itemize}
            \item $lowpt(e_1) < lowpt(e_2)$
        \end{itemize}
        oder
        \begin{itemize}
            \item $lowpt(e_1) = lowpt(e_2)$ und $e_2$ eine Sehne besitzt
        \end{itemize}
    \end{block}
    \begin{center}
        \begin{figure}
            \begin{tikzpicture}[auto]
                \useasboundingbox (-2, 0.5) rectangle (7, 5);

                \draw[edge] (0,1) -- (0,3);
                \draw[edge] (-1.5,4) -- (0,3) node[midway, above] {$e_1$};
                \draw[edge] (1.5,4) -- (0,3) node[midway, above] {$e_2$};

                \draw[back edge, rounded corners] (-1.5,4) .. controls (4,6) and (1,1) .. (0,1);
                \draw[back edge] (1.5,4) .. controls (0.5,2) .. (0,2);


                \draw[edge] (4.5,1) -- (4.5,3);
                \draw[edge] (3,4) -- (4.5,3) node[midway, above] {$e_1$};
                \draw[edge] (6,4) -- (4.5,3) node[midway, above] {$e_2$};

                \draw[back edge, rounded corners] (3,4) .. controls (8.5,6) and (5.5,1) .. (4.5,1);
                \draw[back edge] (6,4) .. controls (5,2) .. (4.5,2);
                \draw[back edge] (6,4) .. controls (5.5,2) .. (4.5,1);
            \end{tikzpicture}
        \end{figure}
    \end{center}
\end{frame}

\begin{frame}
    \frametitle{Verschachtelung}
    \begin{columns}[T]
        \begin{column}{.5\textwidth}
            \begin{figure}
                \begin{tikzpicture}[auto, scale=0.5]
                    \useasboundingbox (-5, 0) rectangle (5, 8);

                    \node[vertex] (u) at (0,0) {$u$};
                    \node[vertex] (v) at (0,3) {$v$};
                    \node[small vertex] (w) at (-4,3) {};
                    \node[small vertex] (x) at (-3,6) {};
                    \node[small vertex] (y) at (-1,8) {};
                    \node[small vertex] (a) at (1,8) {};
                    \node[small vertex] (b) at (3,6) {};
                    \node[small vertex] (c) at (4,3) {};

                    \path[edge, ->] (u) -- (v);
                    \path[left edge] (v) -- (w) node[near end, below, black] {$e_l^L$};
                    \path[left edge] (v) -- (x) node[very near end, below left, black] {$e_2^L$};
                    \path[left edge] (v) -- (y) node[at end, below left, black] {$e_1^L$};
                    \path[right edge] (v) -- (a) node[at end, below right, black] {$e_1^R$};
                    \path[right edge] (v) -- (b) node[very near end, below right, black] {$e_2^R$};
                    \path[right edge] (v) -- (c) node[near end, below, black] {$e_r^R$};

                \end{tikzpicture}
            \end{figure}
        \end{column}
        \begin{column}{.5\textwidth}
            \begin{figure}
                \begin{tikzpicture}[auto, scale=0.5]
                    \useasboundingbox (-5, 0) rectangle (5, 8);

                    \node[vertex] (u) at (0,0) {$u$};
                    \node[vertex] (v) at (0,3) {$v$};
                    \node[small vertex] (w) at (-3,6) {};
                    \node[small vertex] (x) at (3,6) {};

                    \path[edge, ->] (u) -- (v);
                    \path[left edge] (v) -- (w) node[near end, below, black] {$e^L$};
                    \path[right edge] (v) -- (x) node[near end, below, black] {$e^R$};

                    \draw[edge] (w) -- (-4,7);
                    \draw[left edge] (-4,7) .. controls(-4, 3.5) .. (v);
                    \draw[left edge] (-4,7) .. controls(-3, 3.5) .. (v);
                    \draw[right edge] (-4,7) .. controls(-2, 7) .. (v);

                    \draw[edge] (x) -- (4,7);
                    \draw[right edge] (4,7) .. controls(4, 3.5) .. (v);
                    \draw[left edge] (4,7) .. controls(2, 7) .. (v);
                \end{tikzpicture}
            \end{figure}
        \end{column}
    \end{columns}
\end{frame}

\begin{frame}
    \frametitle{Verschachtelung}

    \begin{definition}
        Seien \alert{$e_1^L,\ldots,e_l^L$} die linken ausgehenden Baumkanten und \alert{$e_1^R,\ldots,e_r^R$} die rechten ausgehenden Baumkanten eines Knotens $v$ und $u$ sein Elternknoten. Dann ist die \alert{LR-Ordnung} im Uhrzeigersinn
        \begin{align*}
            &(u, v),\\
            &L(e_l^L),e_l^L,R(e_l^L),\ldots,R(e_1^L),\\
            &L(e_1^R),\ldots,L(e_r^R),e_r^R,R(e_r^R)
        \end{align*}
        Dabei ist \alert{$e_1$} außerhalb von \alert{$e_2$} usw.
    \end{definition}

    \alert{$L(e)$} bezeichnet die linken eingehenden Rückwärtskanten deren Kreise sich $e$ teilen.
\end{frame}

\begin{frame}
    \frametitle{Planarisierung}

    \begin{block}{Lemma}
        Eine \alert{LR-Ordnung} stellt eine Planarisierung einer \alert{LR-Zerlegung} dar.
    \end{block}
    \vspace{2em}

    \begin{block}{Beweisidee}
        Beweis durch Widerspruch
        \begin{itemize}
            \item \alert{Baumkanten} sind immer planar
            \item Überschneidungen wenn dann nur in \alert{Rückwärtskanten}
            \item Fallunterscheidung
                \begin{itemize}
                    \item selbe Klasse
                    \item verschiedene Klassen
                \end{itemize}
        \end{itemize}
    \end{block}
\end{frame}

\begin{frame}
    \frametitle{Algorithmus}

    \begin{itemize}
        \item Testen auf Planarität entspricht Testen auf \alert{LR-Zerlegung}
        \item \alert{LR-Zerlegung} stellt Randbedingungen
            \vspace{2em}
        \item Welche Bedingungen gibt es?
            \begin{itemize}
                \item Überlappende Kreise
                \item Gabelungen
            \end{itemize}
        \item Können alle Bedingungen gleichzeitig erfüllt werden?
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{Algorithmus}

    \begin{columns}[T]
        \begin{column}{.33\textwidth}
            \begin{figure}
                \begin{tikzpicture}[auto, scale=0.5]
                    \useasboundingbox (-4, 0) rectangle (4, 9);

                    \node[small vertex] (u) at (0,3) {};
                    \node[small vertex] (v) at (0,6) {$v$};
                    \node[small vertex] (w) at (-2,8) {$w_1$};

                    \path[edge] (u) -- (v);
                    \path[edge, ->] (v) -- (w);
                    \draw[edge] (0,0) -- (u);
                    \draw[edge] (v) -- (2, 8);

                    \draw[left edge] (w) .. controls (-2, 5) .. (u);
                    \draw[back edge] (w) .. controls (-3, 5) .. (0,1);

                    \draw[right edge] (2, 8) .. controls (2, 4) .. (0,2);
                \end{tikzpicture}
            \end{figure}
        \end{column}
        \begin{column}{.33\textwidth}
            \begin{figure}
                \begin{tikzpicture}[auto, scale=0.5]
                    \useasboundingbox (-4, 0) rectangle (4, 9);

                    \node[small vertex] (u) at (0,3) {};
                    \node[small vertex] (v) at (0,6) {$v$};
                    \node[small vertex] (w) at (-2,8) {$w_1$};
                    \node[small vertex] (x) at (2,8) {$w_2$};

                    \path[edge] (u) -- (v);
                    \path[edge, ->] (v) -- (w);
                    \path[edge, ->] (v) -- (x);
                    \draw[edge] (0,0) -- (u);

                    \draw[left edge] (w) .. controls (-2, 5) .. (u);
                    \draw[right edge] (x) .. controls (2, 5) .. (u);
                    \draw[back edge] (w) .. controls (-3, 5) .. (-1,1);
                    \draw[back edge] (x) .. controls (3, 5) .. (1,1);
                \end{tikzpicture}
            \end{figure}
        \end{column}
        \begin{column}{.33\textwidth}
            \begin{figure}
                \begin{tikzpicture}[auto, scale=0.5]
                    \useasboundingbox (-4, 0) rectangle (4, 9);

                    \node[small vertex] (u) at (0,3) {$v_2$};
                    \node[small vertex] (v) at (0,5) {$v_1$};
                    \node[small vertex] (w) at (0,7) {$x$};
                    \node[small vertex] (x) at (0,9) {};

                    \path[edge] (u) -- (v);
                    \path[edge] (v) -- (w);
                    \path[edge] (w) -- (x);
                    \draw[edge] (0,0) -- (u);

                    \draw[right edge] (x) .. controls (3, 7) .. (u);
                    \draw[right edge] (x) .. controls (1.5, 7) .. (v);
                    \draw[back edge] (w) .. controls (-2, 5) .. (0,1);
                \end{tikzpicture}
            \end{figure}
        \end{column}
    \end{columns}
\end{frame}

\begin{frame}
    \frametitle{Algorithmus}
    \begin{block}{Korollar}
        Seien $b_1 = (u_1, v_1)$ und $b_2 = (u_2, v_2)$ \alert{zwei Rückwärtskanten} mit überlappenden Zyklen und sei $(u, v)$, $(v, w_1)$, $(v, w_2)$ ihre Gabelung. Dann gilt:
        \begin{itemize}
            \item $b_1$ und $b_2$ gehören zu \alert{verschiedenen} Klassen wenn $lowpt(w_2) < v_1$ und $lowpt(w_1) < v_2$
            \item $b_1$ und $b_2$ gehören zur \alert{selben} Klasse wenn es eine Kante $e' = (x, y)$ gibt, sodass $x \in C(b_1) \cap C(b_2)$ und $y \not\in C(b_1) \cap C(b_2)$ und  $lowpt(y) < min\{v_1, v_2\}$
        \end{itemize}
    \end{block}

    \alert{$C(b)$} bezeichnet Knoten auf dem Zyklus, der durch $b$ geschlossen wird.
\end{frame}

\begin{frame}
    \frametitle{Algorithmus}

    \begin{itemize}
        \item Die Bedingungen lassen sich in einem \alert{Constraint Graphen} darstellen
        \item Rückwärtskanten werden Knoten
        \item Abhängigkeiten werden Kanten mit Beschriftung
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{Constraintgraph}

    \begin{figure}
        \begin{tikzpicture}[auto, scale=1.3]
            \useasboundingbox (-4,1) rectangle (4,6);

            \foreach \pos/\name/\ctn in {{(0,1)/a/1},{(0,2)/b/2},{(1,3)/c/3},{(0.75,4)/d/4},{(-0.5,4.5)/e/5},
            {(-1.5,3.5)/f/6}, {(1.25,5.25)/g/7},
            {(0,5.5)/h/8}, {(2.5,6)/i/9}, {(4,5)/j/10},{(2.5,4.5)/k/11},
            {(-2,6)/l/12}, {(-2.5,5)/m/13}, {(-4,5)/n/14}}
            \node<1>[vertex, minimum size=15pt] (\name) at \pos {$\ctn$};

            \foreach \source/ \dest in {a/b, b/c, c/d, d/e, e/f, e/g,
                e/h, h/i, i/j, j/k,
            h/l, l/m, m/n}
            \path<1>[tree edge] (\source) -- (\dest);

            \foreach \source/ \dest in {f/b, m/e, n/a}
            \path<1>[left edge] (\source) -- (\dest);

            \foreach \source/ \dest in {k/c, k/i, j/a, g/d, n/l}
            \path<1>[right edge] (\source) -- (\dest);

            \begin{pgfonlayer}{background}
                \foreach \pos/\name/\ctn in {{(0,1)/a/1},{(0,2)/b/2},{(1,3)/c/3},{(0.75,4)/d/4},{(-0.5,4.5)/e/5},
                {(-1.5,3.5)/f/6}, {(1.25,5.25)/g/7},
                {(0,5.5)/h/8}, {(2.5,6)/i/9}, {(4,5)/j/10},{(2.5,4.5)/k/11},
                {(-2,6)/l/12}, {(-2.5,5)/m/13}, {(-4,5)/n/14}}
                \node<2->[vertex, minimum size=15pt, opacity=0.2] (\name) at \pos {$\ctn$};

                \foreach \source/ \dest in {a/b, b/c, c/d, d/e, e/f, e/g,
                    e/h, h/i, i/j, j/k,
                h/l, l/m, m/n}
                \path<2->[tree edge, opacity=0.35] (\source) -- (\dest);

                \foreach \source/ \dest / \name in {f/b, m/e, n/a}
                \path<2->[left edge, opacity=0.35] (\source) -- (\dest)
                node[midway, anchor=center] (\source\dest) {};

                \foreach \source/ \dest in {k/c, k/i, j/a, g/d, n/l}
                \path<2->[right edge, opacity=0.35] (\source) -- (\dest)
                node[midway, anchor=center] (\source\dest) {};
            \end{pgfonlayer}

            \foreach \source/ \dest in {f/b, m/e, n/a}
            \node<2->[fill=blue,minimum size=10pt] at (\source\dest) {};

            \foreach \source/ \dest in {k/c, k/i, j/a, g/d, n/l}
            \node<2->[fill=red,minimum size=10pt] at (\source\dest) {};

            \begin{pgfonlayer}{midground}
                \path<3->[edge, ultra thick] (kc.center) -- (ki.center) node[midway] {s};
                \path<4->[edge, ultra thick] (me.center) -- (nl.center) node[midway, above] {v};
                \path<5->[edge, ultra thick] (me.center) -- (kc.center) node[midway] {v};
                \path<5->[edge, ultra thick] (fb.center) -- (kc.center) node[midway] {v};
            \end{pgfonlayer}
        \end{tikzpicture}
    \end{figure}
\end{frame}

\begin{frame}
    \frametitle{LR-Algorithmus}

    \begin{block}{Algorithmus}
        \begin{itemize}
            \item Erstellen einer \alert{DFS-Orientierung}
            \item Berechnen von \alert{lowpoints}
            \item Erzeugen des \alert{Constraint Graphs}
            \item Ist dieser Widerspruchsfrei ist der Graph planar
        \end{itemize}
    \end{block}

    \vspace{0.5em}
    \begin{itemize}
        \item Erzeugen des Constraint Graphen polynomieller Aufwand
        \item Kann in $\Oh(n)$ implementiert werden indem der Graph nicht explizit erzeugt wird
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{Q \& A}

    \begin{center} \LARGE Danke für die Aufmerksamkeit!\end{center}
    \vspace{1em}
    \begin{center} \LARGE Fragen?\end{center}
\end{frame}

\begin{frame}[plain]
    \begin{center} \LARGE Backup\end{center}
\end{frame}

\begin{frame}
    \frametitle{Knotenbasierte Algorithmen}
    \begin{itemize}
        \item Es existiert immer eine \alert{Kette} von Planaren Graphen
        \item Einmal \alert{geschlossene Facetten} bleiben geschlossen
        \item Die \alert{Reihenfolge} von Knoten um eine Facette bleibt erhalten
    \end{itemize}

    \begin{figure}
        \begin{tikzpicture}[auto]
            \foreach \pos/\name in {{(0,0)/a}, {(-3, 1)/b}, {(3, 1)/c},{(-2, 3)/d},
            {(2,2.5)/e}}
            \node[small vertex] (\name) at \pos {};

            \foreach \source/ \dest in {a/b, a/c, c/e, b/d,
            a/d, e/a}
            \path[edge] (\source) -- (\dest);

            \draw[dashed] (d) -- (-2, 4);
            \draw[dashed] (d) -- (-1, 2.5);
            \draw[dashed] (e) -- (2.5, 3);
            \draw[dashed] (e) -- (1.5, 3.5);

            \begin{pgfonlayer}{background}
                \fill[red!50] (a.center) -- (b.center) -- (d.center);
                \fill[red!50] (a.center) -- (c.center) -- (e.center);
            \end{pgfonlayer}
        \end{tikzpicture}
    \end{figure}
\end{frame}

\begin{frame}
    \frametitle{Segmente}
    \begin{columns}[T]
        \begin{column}{.6\textwidth}
            \begin{itemize}
                \item Jede Kante eines Blocks ist Teil von mindestens einem Kreis
                \item Kreise enthalten \alert{Segmente}
                    \begin{itemize}
                        \item Kanteninduzierte Teilgraphen
                        \item Mindestens zwei Aufhängungnen (\emph{attachments})
                    \end{itemize}
                \item \alert{Kompatible} Segmente können auf der selben Facette gezeichnet werden.
                    \vspace{1.5em}
                \item<2> Sehne (\emph{chord})
                \item<3> Teilgraph als Segment
            \end{itemize}
        \end{column}
        \begin{column}{.4\textwidth}
            \begin{figure}
                \begin{tikzpicture}[auto, scale=0.8]
                    \foreach \pos/\name in {{(0,0)/a}, {(0,2)/b}, {(4,0)/c},{(4,2)/d},
                    {(0,4)/e}, {(4,4)/f},
                    {(0,6)/g}, {(0,8)/h},{(4,6)/i},{(4,8)/k},
                    {(1.5,1)/l}, {(2.5,1)/m}, {(2,2)/n}}
                    \node[vertex] (\name) at \pos {};

                    \foreach \source/ \dest in {a/b, a/c, c/d,
                        b/e, d/f,
                        e/g, g/h, h/k, k/i, i/f,
                        g/k, h/f,
                    l/m, m/n, n/l, a/l, m/d}
                    \path[edge] (\source) -- (\dest);

                    \foreach \vertex / \fr in {g/2, k/2, h/2, f/2,
                        l/3, m/3, n/3, a/3, d/3
                    }
                    \path<\fr> node[selected vertex] at (\vertex) {};

                    \begin{pgfonlayer}{background}
                        \foreach \source / \dest / \fr in {g/k/2, h/f/2,
                            l/m/3, m/n/3, n/l/3, a/l/3, m/d/3
                        }
                        \path<\fr>[selected edge] (\source) -- (\dest);
                    \end{pgfonlayer}
                \end{tikzpicture}
            \end{figure}
            \vspace{1em}
        \end{column}
    \end{columns}
\end{frame}

\begin{frame}
    \frametitle{Kompatibilität}
    \begin{Lemma}
        Zwei Segmente sind genau dann \alert{kompatibel}, wenn ihre Aufhängungen nicht verflochten (\emph{interleaved}) sind.
    \end{Lemma}

    \vspace{2em}

    \begin{theorem}<2>
        Ein \alert{2-zusammenhängender} Graph mit Kreis $C$ ist planar genau dann wenn
        \begin{itemize}
            \item Der \alert{Verflechtungsgraph} der Segmente von C \alert{bipartit} ist
            \item Für alle Segmente $P$ der Graph \alert{$P \cup C$ planar} ist
        \end{itemize}
    \end{theorem}
\end{frame}

\begin{frame}
    \frametitle{Auslander-Parter}
    \begin{block}{Algorithmus}
        Rekursives Betrachten der Kreise und Teilgraphen mit drei Fällen:
        \begin{itemize}
            \item \textbf{Trivialer Fall} Der Graph $G$ ist ein einfacher Kreis $C$. Tritt nur am Anfang auf.
            \item \textbf{Basisfall} Der Kreis $C$ enthält ein einziges Segment, das ein Pfad ist.
            \item \textbf{Rekursionsfall} Ein Kreis mit mehreren Segmenten oder Subgraphen ist in $G$ enthalten. Anwendung des Theorems und rekursive Abarbeitung der Subgraphen.
        \end{itemize}
    \end{block}

    \vspace{0.5em}
    \begin{itemize}
        \item $\Oh(n)$ Rekursionen mit Verflechtungsgraphen in $\Oh(n^2)$\\
        \item Gesamtkomplexität $\Oh(n^3)$
    \end{itemize}
\end{frame}
\end{document}