mirror of
https://github.com/MartinThoma/LaTeX-examples.git
synced 2025-04-26 06:48:04 +02:00
138 lines
No EOL
5.6 KiB
TeX
138 lines
No EOL
5.6 KiB
TeX
\subsection{Eulerkreisproblem}
|
|
|
|
\begin{frame}{Eulerkreisproblem}{Eulerian path}
|
|
\begin{block}{Erklärung}
|
|
Ein Eulerkreis ist ein Kreis in einem Graphen, in dem jede Kante genau einmal benutzt wird.
|
|
\end{block}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Eulerkreisproblem}{Bedingungen}
|
|
\begin{block}{Im ungerichteten Graph}
|
|
Es existiert ein Eulerkreis\\
|
|
$\Leftrightarrow$ Der Graph ist zusammenhängend und jeder Knoten hat geraden Grad
|
|
\end{block}
|
|
|
|
\begin{block}{Im gerichteten Graph}
|
|
Es existiert ein Eulerkreis\\
|
|
$\Leftrightarrow$ Der Graph ist stark zusammenhängend und für jeden Knoten gilt: Eingangsgrad = Ausgangsgrad
|
|
\end{block}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Algorithmus von Fleury}
|
|
Das Eulerkreisproblem ist effizient lösbar:
|
|
|
|
Algorithmus von Fleury $\in {\cal O}(|E|^2) $:
|
|
|
|
\begin{enumerate}
|
|
\item Start bei einem beliebigen Knoten
|
|
\item Wähle eine unmarkierte von dem Knoten ausgehende Kante, die wenn möglich im Restgraphen keine Brückenkante ist. Wenn es nur Brückenkanten gibt, dann dann wird die Kante zu dem Knoten genommen, der den höhere Ausgangsgrad hat
|
|
\item Markiere diese Kante, füge sie der Kreis hinzu
|
|
\item Wähle den zu der markierten Kante adjazenten Knoten
|
|
\item Wenn dieser Knoten noch unmarkierte Kanten besitzt: \\GOTO 2.
|
|
\end{enumerate}
|
|
\end{frame}
|
|
|
|
%\begin{frame}{Algorithmus von Fleury}{Anwendungsbeispiel}
|
|
% Wortmenge: $\{$as, man, meet, nets, set, sum, tea, team$\}$
|
|
%
|
|
% Menge der Anfangs- und Endbuchstaben: $\{$a, m, n, s, t$\}$
|
|
% \begin{figure}
|
|
% \begin{tikzpicture}[->,scale=1.8, auto,swap]
|
|
% % Draw a 7,11 network
|
|
% % First we draw the vertices
|
|
% \foreach \pos/\name in {{(0,0)/a}, {(0,2)/s},
|
|
% {(4,0)/m}, {(2,2)/t}, {(3,2)/n}}
|
|
% \node[vertex] (\name) at \pos {$\name$};
|
|
% % Connect vertices with edges and draw weights
|
|
% \foreach \source/ \dest /\foo /\pos in {a/s/as/,s/m/sum/bend right,
|
|
% s/t/set/, m/t/meet/bend left,m/n/man/bend right,
|
|
% t/a/tea/bend left, t/m/team/bend left, n/s/nets/bend right}
|
|
% \path (\source) edge [\pos] node {\foo} (\dest);
|
|
% \end{tikzpicture}
|
|
% \end{figure}
|
|
%\end{frame}
|
|
|
|
\begin{frame}{Algorithmus von Fleury}{Anwendungsbeispiel}
|
|
\begin{figure}
|
|
\begin{tikzpicture}[->,scale=1.7, auto,swap]
|
|
% Draw a 7,11 network
|
|
% First we draw the vertices
|
|
\foreach \pos/\name in {{(0,1)/a}, {(2,0)/c}, {(2,3)/b},
|
|
{(4,3)/d}, {(4,1)/e}, {(6,2)/f}, {(6,0)/g}}
|
|
\node[vertex] (\name) at \pos {$\name$};
|
|
% Connect vertices with edges and draw weights
|
|
\foreach \source/ \dest /\pos in {b/a/,c/a/,a/d/,a/e/,c/b/, d/b/, b/e/, e/c/, g/c/, e/d/, d/f/, f/g/}
|
|
\path (\source) edge [\pos] node {} (\dest);
|
|
% Start animating the edge selection.
|
|
% For convenience we use a background layer to highlight edges
|
|
% This way we don't have to worry about the highlighting covering
|
|
% weight labels.
|
|
\begin{pgfonlayer}{background}
|
|
\foreach \source / \dest / \fr / \pos in {a/a/1/, a/e/2/, e/d/3/, d/b/4/, b/a/5/,
|
|
a/d/6/, d/f/7/, f/g/8/, g/c/9/, c/b/10/,
|
|
b/e/11/, e/c/12/, c/a/13/}
|
|
\path<\fr->[selected edge] (\source.center) edge [\pos] node {} (\dest.center);
|
|
\end{pgfonlayer}
|
|
\end{tikzpicture}
|
|
\end{figure}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Algorithmus von Hierholz}
|
|
Effizienter als Fleury
|
|
|
|
\begin{enumerate}
|
|
\item Start bei einem beliebigen Knoten v
|
|
\item Folge so lange Kanten, bis man wieder in v ist
|
|
\item Wiederhole diesen Schritt bei einem Knoten, der bereits in einem Kreis ist und der noch unmarkierte Kanten hat
|
|
\end{enumerate}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Algorithmus von Hierholz}{Anwendungsbeispiel}
|
|
\begin{figure}
|
|
\begin{tikzpicture}[->,scale=1.7, auto,swap]
|
|
% Draw a 7,11 network
|
|
% First we draw the vertices
|
|
\foreach \pos/\name in {{(0,1)/a}, {(2,0)/c}, {(2,3)/b},
|
|
{(4,3)/d}, {(4,1)/e}, {(6,2)/f}, {(6,0)/g}}
|
|
\node[vertex] (\name) at \pos {$\name$};
|
|
% Connect vertices with edges and draw weights
|
|
\foreach \source/ \dest /\pos in {b/a/,c/a/,a/d/,a/e/,c/b/, d/b/, b/e/, e/c/, g/c/, e/d/, d/f/, f/g/}
|
|
\path (\source) edge [\pos] node {} (\dest);
|
|
% Start animating the edge selection.
|
|
% For convenience we use a background layer to highlight edges
|
|
% This way we don't have to worry about the highlighting covering
|
|
% weight labels.
|
|
\begin{pgfonlayer}{background}
|
|
\foreach \source / \dest / \fr / \pos in {a/a/1/, a/e/2/, e/d/3/, d/b/4/, b/a/5/,
|
|
e/c/6/, c/b/7/, b/e/8/, d/f/9/, f/g/10/,
|
|
g/c/11/, c/a/12/, a/d/13/}
|
|
\path<\fr->[selected edge] (\source.center) edge [\pos] node {} (\dest.center);
|
|
\end{pgfonlayer}
|
|
\end{tikzpicture}
|
|
\end{figure}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Eulerpfad}
|
|
\begin{figure}
|
|
\begin{tikzpicture}[,scale=1.8, auto,swap]
|
|
% Draw a 7,11 network
|
|
% First we draw the vertices
|
|
\foreach \pos/\name in {{(0,0)/a}, {(2,0)/b}, {(0,2)/c},
|
|
{(2,2)/d}, {(1,3)/e}}
|
|
\node[vertex] (\name) at \pos {$\name$};
|
|
% Connect vertices with edges and draw weights
|
|
\foreach \source/ \dest /\pos in {a/b/,b/c/, c/d/, d/e/, a/c/, a/d/, b/d/, c/e/}
|
|
\path (\source) edge [\pos] node {} (\dest);
|
|
% Start animating the edge selection.
|
|
% For convenience we use a background layer to highlight edges
|
|
% This way we don't have to worry about the highlighting covering
|
|
% weight labels.
|
|
\begin{pgfonlayer}{background}
|
|
\foreach \source / \dest / \fr / \pos in {a/a/1/, b/d/2/, d/c/3/, c/e/4/, e/d/5/, d/a/6/,
|
|
a/b/7/, b/c/8/, c/a/9/}
|
|
\path<\fr->[selected edge] (\source.center) edge [\pos] node {} (\dest.center);
|
|
\end{pgfonlayer}
|
|
\end{tikzpicture}
|
|
\end{figure}
|
|
Es kann einen Eulerpfad, aber keinen Eulerkreis geben
|
|
\end{frame} |