279 lines
No EOL
7.1 KiB
TeX
279 lines
No EOL
7.1 KiB
TeX
\documentclass[a4paper]{article}
|
|
%\usepackage[singlespacing]{setspace}
|
|
\usepackage[onehalfspacing]{setspace}
|
|
%\usepackage[doublespacing]{setspace}
|
|
\usepackage{geometry} % Required for adjusting page dimensions and margins
|
|
\usepackage{amsmath,amsfonts,stmaryrd,amssymb,mathtools,dsfont} % Math packages
|
|
\usepackage{tabularx}
|
|
\usepackage{colortbl}
|
|
\usepackage{listings}
|
|
\usepackage{amsmath}
|
|
\usepackage{amssymb}
|
|
\usepackage{amsthm}
|
|
\usepackage{subcaption}
|
|
\usepackage{float}
|
|
\usepackage[table,xcdraw]{xcolor}
|
|
\usepackage{tikz-qtree}
|
|
\usepackage{changepage,titlesec,fancyhdr} % For styling Header and Titles
|
|
\pagestyle{fancy}
|
|
\usepackage{array}
|
|
|
|
\usepackage{enumerate} % Custom item numbers for enumerations
|
|
|
|
\usepackage[ruled]{algorithm2e} % Algorithms
|
|
|
|
\usepackage[framemethod=tikz]{mdframed} % Allows defining custom boxed/framed environments
|
|
|
|
\usepackage{listings} % File listings, with syntax highlighting
|
|
\lstset{
|
|
basicstyle=\ttfamily, % Typeset listings in monospace font
|
|
}
|
|
|
|
\usepackage[ddmmyyyy]{datetime}
|
|
|
|
|
|
\geometry{
|
|
paper=a4paper, % Paper size, change to letterpaper for US letter size
|
|
top=2.5cm, % Top margin
|
|
bottom=3cm, % Bottom margin
|
|
left=2.5cm, % Left margin
|
|
right=2.5cm, % Right margin
|
|
headheight=25pt, % Header height
|
|
footskip=1.5cm, % Space from the bottom margin to the baseline of the footer
|
|
headsep=1cm, % Space from the top margin to the baseline of the header
|
|
%showframe, % Uncomment to show how the type block is set on the page
|
|
}
|
|
\lhead{ALGO-1\\Sommersemester 2024}
|
|
\chead{\bfseries{Übungsblatt 5}\\}
|
|
\rhead{7987847\\Jonas Werner}
|
|
|
|
\begin{document}
|
|
|
|
\section*{Aufgabe 5.1}
|
|
Bestimmen Sie für jeden leeren Eintrag aus der folgenden Tabelle das richtige Verhältnis zwischen
|
|
$f$ und $g$. Eine Begründung ist nicht nötig.\\
|
|
|
|
\begin{tabular}{| c | c | c | c | c | c |}
|
|
\hline
|
|
& $g(n) = 3n$ & $g(n) = n \sqrt{n}$ & $g(n) = 1$ & $g(n) = log^2(n)$ & $g(n) = \binom{n}{2}$ \\
|
|
\hline
|
|
$f(n) = n^2$ & $g = o(f)$ & $g = o(f)$ & $g = o(f)$ & $g = o(f)$ & $g = \theta(f)$ \\
|
|
\hline
|
|
$f(n) = \sqrt{n}$ & $f = o(g)$ & $f = o(g)$ & $g = o(f)$ & $g = o(f)$ & $f = o(g)$ \\
|
|
\hline
|
|
$f(n) = log(log(n))$ & $f = o(g)$ & $f = o(g)$ & $g = o(f)$ & $f = o(g)$ & $f = o(g)$ \\
|
|
\hline
|
|
\end{tabular}
|
|
|
|
\section*{Aufgabe 5.2}
|
|
\subsection*{a)}
|
|
\[ T(n) = T\left(\frac{n}{3}\right) + n\]
|
|
|
|
Daraus lassen sich folgende Werte ablesen:
|
|
\begin{itemize}
|
|
\item $a = 1$
|
|
\item $b = 3$
|
|
\item $t(n) = n $
|
|
\item $k = 1$
|
|
\end{itemize}
|
|
|
|
Damit berechnen wir:
|
|
\[ \log_b a = \log_3 1 = 0 < k = 1 \]
|
|
|
|
Daraus folgt:
|
|
\[
|
|
\Rightarrow \text{Es tritt Fall (c) ein.}
|
|
\]
|
|
|
|
Somit gilt die folgende Gleichung:
|
|
\[ T(n) = \theta\left(t(n)\right) = \theta\left(n\right)\]
|
|
|
|
\break
|
|
|
|
\subsection*{b)}
|
|
\[ T(n) = 2 \cdot T\left(\frac{n}{4}\right) + 2 \cdot \sqrt{n} + log^3n \]
|
|
|
|
Daraus lassen sich folgende Werte ablesen:
|
|
\begin{itemize}
|
|
\item $a = 2$
|
|
\item $b = 4$
|
|
\item $t(n) = 2 \cdot \sqrt{n} + \log^3 n$
|
|
\item $k = \frac{1}{2}$
|
|
\end{itemize}
|
|
|
|
Damit berechnen wir:
|
|
\[ \log_b a = \log_4 2 = \frac{1}{2} = k \]
|
|
|
|
Daraus folgt:
|
|
\[
|
|
\Rightarrow \text{Es tritt Fall (b) ein.}
|
|
\]
|
|
|
|
Somit gilt die folgende Gleichung:
|
|
\[ T(n) = \theta\left(n^{log_b a} \cdot \log n\right) = \theta\left(n^{log_4 2} \cdot \log n\right) = \theta\left(\sqrt{n} \cdot \log n\right)\]
|
|
|
|
|
|
|
|
\subsection*{c)}
|
|
\[ T(n) = 10 \cdot T\left(\frac{n}{3}\right) + n^2\log_2n \]
|
|
|
|
Daraus lassen sich folgende Werte ablesen:
|
|
\begin{itemize}
|
|
\item $a = 10$
|
|
\item $b = 3$
|
|
\item $t(n) = n^2\log_2n$
|
|
\item $1 < k < 2$
|
|
\end{itemize}
|
|
|
|
Damit berechnen wir:
|
|
\[ \log_b a = \log_3 10 \approx 2.1 > k \]
|
|
|
|
Daraus folgt:
|
|
\[
|
|
\Rightarrow \text{Es tritt Fall (a) ein.}
|
|
\]
|
|
|
|
Somit gilt die folgende Gleichung:
|
|
\[ T(n) = \theta\left(n^{\log_{b}a}\right) = \theta\left(n^{\log_{3}10}\right)\]
|
|
|
|
\break
|
|
|
|
\section*{Aufgabe 5.3}
|
|
Gegeben ist eine Datenstruktur für einfach verkettete Listen, wobei die Listenelemente ein Feld $next$
|
|
mit dem Zeiger auf das nächste Element und ein Feld $data$ mit dem Schlüssel haben. Die Elemente der
|
|
Liste sind absteigend nach $data$ sortiert. Beschreiben Sie für jede der folgenden Aufgabenstellungen
|
|
einen möglichst effizienten Algorithmus in Pseudocode und analysieren Sie die Worst-Case Laufzeit:
|
|
|
|
\subsection*{a)}
|
|
Entferne Elemente mit gleichem Schlüssel, so dass in der resultierenden Liste jeder Schlüssel
|
|
nur einmal vorkommt.
|
|
|
|
Die Node Klasse ist wie folgt definiert:
|
|
\begin{verbatim}
|
|
class Node {
|
|
data: int
|
|
next: Node
|
|
}
|
|
\end{verbatim}
|
|
|
|
|
|
\begin{verbatim}
|
|
function removeDuplicates(head) {
|
|
|
|
if head == null {
|
|
return null
|
|
}
|
|
|
|
current = head
|
|
|
|
while current != null and current.next != null {
|
|
if current.data == current.next.data {
|
|
current.next = current.next.next
|
|
} else {
|
|
current = current.next
|
|
}
|
|
}
|
|
|
|
return head
|
|
}
|
|
\end{verbatim}
|
|
Die worstcase Laufzeit beträgt $\mathcal{O}(n)$ mit $n$ der Anzahl an Elementen.
|
|
|
|
\break
|
|
|
|
\subsection*{b)}
|
|
Invertiere die Liste, sodass die Elemente aufsteigend nach $data$ sortiert sind. Dazu steht zu-
|
|
sätzlich nur konstant viel Speicherplatz zur Verfügung.
|
|
|
|
\begin{verbatim}
|
|
function reverseList(head) {
|
|
prev = null
|
|
|
|
current = head
|
|
|
|
while current != null {
|
|
next = current.next
|
|
current.next = prev
|
|
prev = current
|
|
current = next
|
|
}
|
|
|
|
return prev
|
|
}
|
|
\end{verbatim}
|
|
|
|
\subsection*{c)}
|
|
ngenommen wir erweitern die Listenelemente um das Feld $rang$. Dieses Feld soll die Anzahl
|
|
der Elemente in der Liste mit größerem Schlüssel angeben. Berechne für jedes Element den
|
|
richtigen Eintrag für $rang$.
|
|
|
|
\begin{verbatim}
|
|
function calculateRank(head) {
|
|
if head == null {
|
|
return null
|
|
}
|
|
|
|
current = head
|
|
rank = 0
|
|
while current != null {
|
|
current.rang = rank
|
|
rank += 1
|
|
current = current.next
|
|
}
|
|
|
|
return head
|
|
}
|
|
\end{verbatim}
|
|
|
|
\break
|
|
|
|
\section*{Aufgabe 5.4}
|
|
Wir betrachten den rechts dargestellten Baum $B$.
|
|
\subsection*{a)}
|
|
Geben Sie $B$ als Eltern-Array an.\\
|
|
|
|
\begin{tabular}{| c | c | c | c | c | c | c | c | c | c | c | c | c | c |}
|
|
\hline
|
|
1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 \\
|
|
\hline
|
|
0 & 1 & 2 & 2 & 1 & 5 & 6 & 6 & 6 & 1 & 10 & 10 & 12 & 12 \\
|
|
\hline
|
|
\end{tabular}
|
|
|
|
\subsection*{b)}
|
|
Welche Tiefe hat $B$? Welche Tiefe hat der Knoten 12?
|
|
|
|
\begin{itemize}
|
|
\item Tiefe $B$: 3
|
|
\item Tiefe Knoten 12: 2
|
|
\end{itemize}
|
|
|
|
Für einen anderen Baum $B'$ ergeben sich folgende Traversierungen:\\
|
|
InOrder($B'$) = 1, 9, 2, 8, 3, 4, 7, 5, 6\\
|
|
PostOrder($B'$) = 1, 2, 3, 4, 5, 6, 7, 8, 9
|
|
|
|
\subsection*{c)}
|
|
Geben Sie B' an.\\
|
|
|
|
\begin{tikzpicture}[level distance=1.5cm, sibling distance=2.5cm,
|
|
every node/.style={circle, draw, minimum size=0.7cm, inner sep=0}]
|
|
|
|
\node {9}
|
|
child {node {1}}
|
|
child {node {8}
|
|
child {node {2}}
|
|
child {node {7}
|
|
child {node {4}
|
|
child {node {3}}
|
|
child[missing] {}
|
|
}
|
|
child {node {6}
|
|
child {node {5}}
|
|
child[missing] {}
|
|
}
|
|
}
|
|
};
|
|
\end{tikzpicture}
|
|
|
|
|
|
\end{document} |