fop-projekt/doc/Dokumentation.tex
2019-02-14 16:43:07 +01:00

101 lines
3.5 KiB
TeX

\documentclass{article}
\usepackage{amsmath}
\usepackage{algorithm}
\usepackage[noend]{algpseudocode}
\usepackage[utf8]{inputenc}
\makeatletter
\def\BState{\State\hskip-\ALG@thistlm}
\makeatother
\title{FOP Projektgruppe 175}
\author{Steffen Wagner\\
Dennis Weinberger\\
Jonas Süß\\
Joachim Schmidt}
\begin{document}
\maketitle
\tableofcontents
\section{Der Graph}
\subsection{Bildung der Kanten}
Der Algorithmus für die Bildung der Kanten ist folgender:
\begin{algorithm}
\caption{Bildung von Kanten}\label{euclid}
\begin{algorithmic}[1]
\Procedure{generateEdges}{}
\State $\textit{firstNode} \gets \text{first element of }\textit{nodes}$
\State $allVisitedNodes \gets \textit{empty}$
\State $nextVisitNodes \gets empty$
\State $\text{append } firstNode \text{ to } allVisitedNodes$
\State $\text{neighborsOf } firstNode$
\State $\rightarrow \text{filter out all } x \text{ where } allVisitedNodes \text{ contains } x$
\State $\rightarrow \text{append to } nextVisitNodes$
\BState \emph{loop}
\If {$nextVisitNodes \text{ is empty}$}
break
\EndIf
\State $\text{neighborsOf first element of } nextVisitNodes$
\State $\rightarrow \text{filter out all } x \text{ where } allVisitedNodes \text{ contains } x$
\State $\rightarrow \text{append to } nextVisitNodes$
\State $\text{append first element of } nextVisitNodes \text{ to } allVisitedNodes$
\State $\text{delete first element of } nextVisitNodes$
\BState \emph{end loop}
\EndProcedure
\end{algorithmic}
\end{algorithm}
\subsection{Überprüfung der Erreichbarkeit aller Knoten}
Der Algorithmus, der prüft, ob alle Knoten erreichbar sind, ist
folgender:
\begin{algorithm}
\caption{Erreichbarkeit aller Knoten}\label{euclid}
\begin{algorithmic}[1]
\Procedure{allNodesConnected}{}
\State $\textit{firstNode} \gets \text{first element of }\textit{nodes}$
\State $allVisitedNodes \gets \textit{empty}$
\State $nextVisitNodes \gets empty$
\State $\text{append } firstNode \text{ to } allVisitedNodes$
\State $\text{neighborsOf } firstNode$
\State $\rightarrow \text{filter out all } x \text{ where } allVisitedNodes \text{ contains } x$
\State $\rightarrow \text{append to } nextVisitNodes$
\BState \emph{loop}
\If {$nextVisitNodes \text{ is empty}$}
break
\EndIf
\State $\text{append first element of } nextVisitNodes \text{ to } allVisitedNodes$
\State $\text{neighborsOf first element of } nextVisitNodes$
\State $\rightarrow \text{filter out all } x \text{ where } allVisitedNodes \text{ contains } x$
\State $\rightarrow \text{append to } nextVisitNodes$
\State $\text{delete first element of } nextVisitNodes$
\BState \emph{end loop}
\EndProcedure
\end{algorithmic}
\end{algorithm}
Der Algorithmus sammelt sozusagen alle Knoten, die
aufgrund von momentanen Erkenntnissen erreichbar
sind, in der Liste \texttt{nextVisitNodes}. Hingegen sind
alle Knoten, die schon erreicht worden sind, in der Liste
\texttt{allVisitedNodes} gespeichert.
Der Algorithmus geht die Liste \texttt{nextVisitNodes}
solange durch, bis diese leer ist. In jeder Iteration wird
das erste Element der Liste aus der Liste entfernt.
Zunächst wird dieses Element der Liste \texttt{allVisitedNodes}
hinzugefügt. Daraufhin
werden die Nachbarn dieses Elements herausgefunden. Diejenigen
Nachbarn, die schon in der Liste \texttt{allVisitedNodes}
vorhanden sind, werden verworfen. Die restlichen Nachbarn
werden der Liste \texttt{nextVisitNodes} hinzugefügt.
\end{document}