86 lines
3 KiB
TeX
86 lines
3 KiB
TeX
\documentclass{ngexrcs}
|
|
\usepackage{hyperref}
|
|
|
|
\title{1. Übungsblatt}
|
|
\subject{Algorithmische Graphentheorie}
|
|
\author{Jasper Gude \and Pia Rötgers}
|
|
|
|
\begin{document}
|
|
\maketitle
|
|
\points[\qquad]{20}
|
|
\section{Spannbäume \& Breitensuche}
|
|
Sei $G = \tup{V, E}$ ein zusammenhängender Graph mit Kantengewichten $w: E \to \NN$
|
|
und $s \in V \deg$ ein ausgezeichneter Knoten.
|
|
\begin{enumerate}
|
|
\item
|
|
\begin{quote}
|
|
Wenn $w(e) = 1$ für alle $e \in E$, dann ist der Breitensuchbaum mit
|
|
Quelle $s$ ein minimaler Spannbaum.
|
|
\end{quote}
|
|
Die Breitensuche berechnet in diesem
|
|
Fall den kürzesten Weg von jedem Knoten zum Knoten $s$, also den
|
|
Breitensuchbaum. Dieser spannt also einen minimalen Spannbaum auf.
|
|
\points{2}
|
|
\item
|
|
\begin{quote}
|
|
Wenn $w(e) = 1$ für alle $e \in E$, dann ist jeder minimale Spannbaum
|
|
von $G$ ein Breitensuchbaum mit Quelle $s$.
|
|
\end{quote}
|
|
Falsch, siehe \autoref{fig:msb}.
|
|
\points{2}
|
|
\begin{figure}[h]
|
|
\centering
|
|
\includegraphics[width=0.2\textwidth]{msb.eps}
|
|
\caption{$\pi$-Zeiger des Breitensuchbaums und MSB blau hinterlegt.}
|
|
\label{fig:msb}
|
|
\end{figure}
|
|
\item
|
|
\begin{quote}
|
|
Wenn $w(e) \in \set{1, 2, 3}$ für alle $e \in E$, dann ist jeder minimale
|
|
Spannbaum von $G$ ein Tiefensuchbaum mit Quelle $s$.
|
|
\end{quote}
|
|
Sei $w(e) = 1$ für
|
|
alle $e \in E$ so gilt das Gegenbeispiel von oben. Also ist die Aussage
|
|
falsch.
|
|
\points{2}
|
|
\end{enumerate}
|
|
|
|
\section{Kreissuche}
|
|
\begin{enumerate}
|
|
\item
|
|
Wähle Startknoten $s$ und füge ihn in eine neue Queue $Q$ ein.
|
|
|
|
Nimm den vordersten Knoten aus $Q$ und füge seine noch nicht verbrauchten
|
|
Nachbarn ein. Markiere diesen Knoten anschließend als verbraucht ($black$).
|
|
Wiederhole den Schritt solange bis $Q$ leer ist. Merke dir dabei die zwei
|
|
letzten entnommenen Knoten. Sind sie gleich, hat der Graph einen
|
|
einfachen Kreis.
|
|
|
|
\begin{algorithmic}
|
|
\alg{EinfacherKreis}(Graph $G$, Vertex $s$) \+ \\
|
|
\alg{Initialize}($G$, $s$) \\
|
|
$Q \gets$ new \alg{Queue}() \\
|
|
$Q.$\alg{Enqueue}($s$) \\
|
|
$t_1 \gets nil$ \\
|
|
$t_2 \gets s$ \\
|
|
while $Q \neq \emptyset$ do \+ \\
|
|
$u \gets Q.$\alg{Dequeue}() \\
|
|
$t_1 \gets t_2$ \\
|
|
$t_2 \gets u$ \\
|
|
foreach $v \in Adj[u]$ do \+ \\
|
|
if $v.color = white$ then \+ \\
|
|
$Q.$\alg{Enqueue}($v$) \-\- \\
|
|
$u.color \gets black$ \- \\
|
|
if $t_1 = t_2$ then \+ \\
|
|
return $true$ \- \\
|
|
else \+ \\
|
|
return $false$
|
|
|
|
\end{algorithmic}
|
|
\end{enumerate}
|
|
|
|
\section{Eulerwege}
|
|
|
|
\section{Graphmodellierung}
|
|
|
|
\end{document}
|