diff --git a/DokumentationAufgabe1.tex b/DokumentationAufgabe1.tex index 52d1612..2b4013b 100644 --- a/DokumentationAufgabe1.tex +++ b/DokumentationAufgabe1.tex @@ -221,6 +221,9 @@ Außerdem wird Lisa auf einer optimalen Route vor dem letzten Abschnitt immer vo \label{fig:winkel} \end{figure} +\subsection{Laufzeitanalyse} +Wenn in jedem Schritt jede andere Polygonecke berücksichtigt wird, hat der Algorithmus im schlechtesten Fall eine Laufzeit von $O(n!)$, wobei $n$ die Anzahl der Ecken der Polygone ist. Effektiv können allerdings in jedem Schritt nur eine kleine Anzahl anderer Ecken erreicht werden. Das Programm durchsucht auch erst Möglichkeiten, die eher zu einer Lösung führen, was die Laufzeit weiter verringert. + \section{Umsetzung} Das Programm durchsucht in einer optimierten Breitensuche alle Wege, die über Polygonecken führen. Priorisiert (mit einem binären Max-Heap) werden jene Wege, bei denen Lisa theoretisch am längsten warten könnte. Um die Route abzuschließen, probiert das Programm danach immer, einen optimalen Weg zur y-Achse zu finden (dieser trifft sie im 60\degree-Winkel, wie oben beschrieben). Die Route, bei dem Lisa sich am meisten Zeit lassen kann, wird gespeichert, falls nicht schon eine bessere Lösung gefunden wurde. Die Suche ist beendet, sobald alle unvollständigen Routen die beste Wartezeit nicht mehr verbessern können. @@ -228,30 +231,35 @@ Die so gefundene Route kann in einer svg-Datei gespeichert werden. Während der \section{Beispiele} Alle Beispiele sind im Maßstab 1:70m. +\lstinputlisting[caption=Lösung für lisarennt1.txt,frame=single,breaklines=true]{run1.txt} \begin{figure}[H] \centering \input{run1.tkz} \caption{Beispiel 1} \label{fig:bsp1} \end{figure} +\lstinputlisting[caption=Lösung für lisarennt2.txt,frame=single,breaklines=true]{run2.txt} \begin{figure}[H] \centering \input{run2.tkz} \caption{Beispiel 2} \label{fig:bsp2} \end{figure} +\lstinputlisting[caption=Lösung für lisarennt3.txt,frame=single,breaklines=true]{run3.txt} \begin{figure}[H] \centering \input{run3.tkz} \caption{Beispiel 3} \label{fig:bsp3} \end{figure} +\lstinputlisting[caption=Lösung für lisarennt4.txt,frame=single,breaklines=true]{run4.txt} \begin{figure}[H] \centering \input{run4.tkz} \caption{Beispiel 4} \label{fig:bsp4} \end{figure} +\lstinputlisting[caption=Lösung für lisarennt5.txt,frame=single,breaklines=true]{run5.txt} \begin{figure}[H] \centering \input{run5.tkz} diff --git a/src/main.rs b/src/main.rs index 87c9de0..7961c5d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -66,7 +66,7 @@ fn main() { delay: max_possible_delay(bus, house), }; - eprintln!("Maximum: {:?}", delay_to_time(start.delay)); + eprintln!("Theoretisches Maximum: {:?}", delay_to_time(start.delay)); // Zustände in Max-Heap sortieren let mut states = BinaryHeap::new(); @@ -161,6 +161,7 @@ fn main() { states.extend(all); } } + eprintln!("Finale Lösung:"); let route = best; eprintln!("Startzeit: {:?}", delay_to_time(best_delay)); eprintln!(