73 lines
2.9 KiB
TeX
73 lines
2.9 KiB
TeX
\documentclass[uebung]{../../../lecture}
|
|
|
|
\title{IPI: Übungsblatt 7}
|
|
\author{Samuel Weidemaier, Christian Merten}
|
|
|
|
\begin{document}
|
|
|
|
\punkte
|
|
|
|
\begin{aufgabe} LIFO vs. FIFO
|
|
\begin{enumerate}
|
|
\item Kunden in einer Bäckerei
|
|
|
|
FIFO: Der erste Kunde wird zu erst bedient
|
|
\item Menschen in einem Aufzug
|
|
|
|
LIFO: Der letzte Mensch verlässt den Aufzug als erstes (bei einer Tür)
|
|
\item Lebensmittel in Ihrem Kühlschrank
|
|
|
|
FIFO: Die ältesten Lebensmittel müssen als erstes verbraucht werden.
|
|
\item Autos auf einer Autofähre
|
|
|
|
Def. (Autofähre). Eine Fähre mit einer Auffahrt und einer Ausfahrt, jedes Auto
|
|
befährt die Fähre nur vorwärts.
|
|
|
|
FIFO: Das erste Auto steht ganz vorne auf der Fähre und verlässt diese als erstes
|
|
auf der anderen Seite.
|
|
\item Druckanträge auf einen Drucker
|
|
|
|
FIFO: Der erste Druckauftrag wird als erstes ausgeführt.
|
|
\item Besuchen der Knoten eines Baums nach dem Depth-First-Prinzip
|
|
|
|
FIFO: Die Elemente, die als erstes dem Baum hinzugefügt wurden, also ganz oben
|
|
stehen, werden bei der Depth-First-Suche auch als erstes ausgewertet.
|
|
\item Rekursive Funktionsaufrufe
|
|
|
|
LIFO: Der letzte Funktionsaufruf wird als erstes vollständig ausgewertet.
|
|
\end{enumerate}
|
|
\end{aufgabe}
|
|
|
|
\begin{aufgabe}
|
|
Hase und Igel
|
|
\begin{enumerate}[a)]
|
|
\item Wenn kein Zyklus vorliegt, wird der \textit{Hase} zuerst auf Null zeigen.
|
|
Falls der Zeiger des \textit{Hasen} aber den \textit{Igel} überrundet, muss ein
|
|
Zyklus vorliegen, Das wird dann erkannt, wenn \textit{Hase} und \textit{Igel} zum
|
|
gleichen Zeitpunkt auf das selbe Element zeigen. Der Abstand von \textit{Hase} zu
|
|
\textit{Igel} wird dabei immer kleiner, sodass dies in endlicher Zeit erreicht wird.
|
|
|
|
Die Länge des Zyklus wird erkannt durch die Differenz der Schrittzahlen, des ersten
|
|
Aufeinandertreffens und dem zweiten.
|
|
\item siehe \textit{haseigel.cpp}
|
|
\end{enumerate}
|
|
\end{aufgabe}
|
|
|
|
\begin{aufgabe}
|
|
Warteschlangen
|
|
\begin{enumerate}[a)]
|
|
\item siehe \textit{queue\_einfach.cpp}
|
|
\item siehe \textit{queue.cpp}
|
|
\item Die Version der einfach verketteten Liste braucht ca. 2550 mal so lang, wie die zweite. Dies liegt
|
|
an der Komplexität O(n) des Hinzufügens eines Elements für
|
|
eine einfach verkettete Liste, da hier durch die ganze Liste iteriert werden muss, um das letzte
|
|
Element zu finden. Bei einer doppelt verketteten Liste liegt eine Komplexität
|
|
von O(1) vor, da hier direkt auf das letzte Element zugegriffen werden kann.
|
|
Das Entfernen am Listenanfang ist immer eine O(1) Operation, weil hier direkt in beiden
|
|
Fällen der Pointer auf das erste Element verwendet werden kann.
|
|
\end{enumerate}
|
|
|
|
\end{aufgabe}
|
|
|
|
\end{document}
|