From f77af9c31758e9e8173a1b65f11a594c5afaa59c Mon Sep 17 00:00:00 2001 From: Ruben Date: Wed, 22 May 2019 11:01:59 +0200 Subject: [PATCH] Added second pseudo-algorithm --- .gitignore | 1 + verslag/verslag.tex | 47 +++++++++++++++++++++++++++++++++++++++------ 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 2d226f3..a16e89c 100644 --- a/.gitignore +++ b/.gitignore @@ -581,6 +581,7 @@ fabric.properties *.aux *.log *.save +*.synctex.gz # End of https://www.gitignore.io/api/rider,csharp,visualstudio diff --git a/verslag/verslag.tex b/verslag/verslag.tex index 6043819..265a481 100644 --- a/verslag/verslag.tex +++ b/verslag/verslag.tex @@ -4,6 +4,7 @@ \usepackage[T1]{fontenc} \usepackage[dutch]{babel} \usepackage[linesnumbered, algoruled, lined]{algorithm2e} +\usepackage{float} \title{Project: Snijdende cirkels} \author{Arthur Bols \& Ruben Van Laer} @@ -13,14 +14,16 @@ \maketitle \section{Inleiding} + In dit practicum trachten we aan de hand van algoritmes met vooropgestelde complexiteiten de snijpunten van een set van gegeven cirkels te bepalen. + \section{Snijding van twee cirkels} \section{Hoogniveau beschrijving van de algoritmen} - \subsection{Simpel algoritme} - \begin{algorithm} - $S \gets \emptyset$\\ - $cirkels$: lijst van cirkels met attributen het middelpunt en de straal.\\ - \For{$c_1$ in $cirkels$}{ - \For{$c_2$ in $cirkels$}{ + \subsection{Simpel algoritme $O(N^2)$} + \begin{algorithm}[H] + \{$cirkels$: lijst van cirkels met een middelpunt en een straal\}\\ + $S \gets \emptyset$ \{$S$: lijst met alle snijpunten\}\\ + \For{iedere $c_1$ in $cirkels$}{ + \For{iedere $c_2$ in $cirkels$}{ $snpt \gets$ Snijpunten($c_1$,$c_2$)\\ \If{$snpt \neq \emptyset$}{ Voegtoe($S$,$snpt$) @@ -29,6 +32,38 @@ } \caption{Simpel Algoritme} \end{algorithm} + \subsection{Doorlooplijnalgoritme $O(N^2)$} + \begin{algorithm}[H] + \{$cirkels$: lijst van cirkels met een middelpunt en een straal\}\\ + $E \gets \emptyset$ \{$E$: gesorteerde rij met de horizontale begin- en eindpunten van elke cirkel (ook wel de 'Events' van de doorlooplijn)\}\\ + \For{iedere $c$ in $cirkels$}{ + $p_1 \gets$ Beginpunt($c$)\\ + $p_2 \gets$ Eindpunt($c$)\\ + Voegtoe($E$, $p_1$)\\ + Voegtoe($E$, $p_2$) + } + $S \gets \emptyset$ \{$S$: lijst met alle snijpunten\}\\ + $A \gets \emptyset$ \{$A$: lijst met cirkels die snijden met de doorlooplijn\}\\ + \While{$E \neq \emptyset$}{ + $e \gets$ Kleinste($E$)\\ + Verwijder($E$, $e$)\\ + \If{$e$ is een beginpunt}{ + $c \gets$ Cirkel($e$)\\ + \For{iedere $c_i$ in $A$}{ + $snpt \gets$ Snijpunten($c$,$c_i$)\\ + \If{$snpt \neq \emptyset$}{ + Voegtoe($S$,$snpt$) + } + } + Voegtoe($A$, $c$)\\ + } + \If{$e$ is een eindpunt}{ + $c \gets$ Cirkel($e$)\\ + Verwijder($A$, $c$) + } + } + \caption{Doorlooplijnalgoritme $O(N^2)$} + \end{algorithm} \section{Beschrijving experimenten en correctheid} \section{Bespreking resultaten en rekentijden}