\documentclass{bschlangaul-aufgabe}
\bLadePakete{mathe,java}
\begin{document}
\bAufgabenMetadaten{
  Titel = {Aufgabe 8},
  Thematik = {Hashing mit Modulo 8},
  Referenz = 46115-2015-H.T2-A1,
  RelativerPfad = Examen/46115/2015/09/Thema-2/Aufgabe-1.tex,
  ZitatSchluessel = examen:46115:2015:09,
  ZitatBeschreibung = {Thema 2 Aufgabe 1
(Auszug)},
  BearbeitungsStand = mit Lösung,
  Korrektheit = unbekannt,
  Ueberprueft = {unbekannt},
  Stichwoerter = {Streutabellen (Hashing)},
  EinzelpruefungsNr = 46115,
  Jahr = 2015,
  Monat = 09,
  ThemaNr = 2,
  AufgabeNr = 1,
}

Fügen\index{Streutabellen (Hashing)} \footcite[Thema 2 Aufgabe 1
(Auszug)]{examen:46115:2015:09} Sie die folgenden Werte in der gegebenen
Reihenfolge in eine Streutabelle der Größe $8$ (mit den Indizes $0$ bis
$7$) und der Streufunktion $h(x) = x \mod 8$ ein. Verwenden Sie die
jeweils angegebene Hash-Variante bzw. Kollisionsauflösung: $15$, $3$,
$9$, $23$, $1$, $8$, $17$, $4$ \footcite[entnommen aus Algorithmen und
Datenstrukturen, Übungsblatt 5, Universität Würzburg, Aufgabe
8]{aud:pu:7}

\begin{enumerate}

%%
% (a)
%%

\item \bPseudoUeberschrift{Offenes Hashing}

Zur Kollisionsauflösung wird Verkettung
verwendet.

\bPseudoUeberschrift{Beispiel}

Für die beiden Werte $8$ und $16$ würde die Lösung wie folgt aussehen:

\begin{center}
\begin{tabular}{l|cccc}
Bucket    & 0  & 1      & 2 & $\cdots$ \\\hline
Inhalt    & 8 \\
          & 16 \\
\end{tabular}
\end{center}

\begin{bAntwort}
{\footnotesize
\begin{equation*}
\begin{aligned}
h(15) &= 15 \mod 8 &= 7\\
h(3)  &= 3 \mod 8  &= 3\\
h(9)  &= 9 \mod 8  &= 1\\
h(23) &= 23 \mod 8 &= 7\\
h(1)  &= 1 \mod 8  &= 1\\
h(8)  &= 8 \mod 8  &= 0\\
h(17) &= 17 \mod 8 &= 1\\
h(4)  &= 4 \mod 8  &= 4\\
\end{aligned}
\end{equation*}}

\begin{center}
\begin{tabular}{l|cccccccc}
Bucket & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7  \\\hline
Inhalt & 8 & 9 &   & 3 & 4 &   &   & 15 \\
       &   & 1 &   &   &   &   &   & 23 \\
       &   & 17 &  &   &   &   &   &    \\
\end{tabular}
\end{center}
\end{bAntwort}

%%
% (b)
%%

\item \bPseudoUeberschrift{Geschlossenes Hashing}

Zur Kollisionsauflösung wird lineares Sondieren (nur hochzählend) mit
Schrittweite $+5$ verwendet.

Treten beim Einfügen Kollisionen auf, dann notieren Sie die Anzahl der
Versuche zum Ablegen des Wertes im Subskript (\zB das Einfügen des
Wertes 8 gelingt im 5. Versuch: $8_5$).

\bPseudoUeberschrift{Beispiel}

Für die beiden Werte $8$ und $16$ würde die Lösung wie folgt aussehen:

\begin{center}
\begin{tabular}{l|ccccccc}
Bucket    & 0  & 1      & 2 & 3 & 4 & 5 &  $\cdots$  \\\hline
Inhalt    & 8 & &&&& $16_1$\\
\end{tabular}
\end{center}

\begin{bAntwort}
$h'(x) = x \mod 8$

$h(x, i) = (h'(x) + i \cdot 5) \mod 8$

\bPseudoUeberschrift{17 einfügen}

\begin{center}
\begin{tabular}{l|cccccccc}
Bucket    & 0  & 1 & 2     & 3 & 4      & 5 & 6     & 7 \\\hline
Inhalt    & 8  & 9 &       & 3 & $23_2$ &   & $1_2$ & 15 \\
\end{tabular}
\end{center}

{\tiny
\begin{equation*}
\begin{aligned}
\text{1. Versuch: } h(17, 0) &= (h'(17) + 0 \cdot 5) \mod 8 &= (1 + 0) \mod 8  &= 1 \mod 8  &= 1 \text{ (belegt von } 9)\\
\text{2. Versuch: } h(17, 1) &= (h'(17) + 1 \cdot 5) \mod 8 &= (1 + 5) \mod 8  &= 6 \mod 8  &= 6 \text{ (belegt von } 1)\\
\text{3. Versuch: } h(17, 2) &= (h'(17) + 2 \cdot 5) \mod 8 &= (1 + 10) \mod 8 &= 11 \mod 8 &= 3 \text{ (belegt von } 3)\\
\text{4. Versuch: } h(17, 3) &= (h'(17) + 3 \cdot 5) \mod 8 &= (1 + 15) \mod 8 &= 16 \mod 8 &= 0 \text{ (belegt von } 8)\\
\text{5. Versuch: } h(17, 4) &= (h'(17) + 4 \cdot 5) \mod 8 &= (1 + 20) \mod 8 &= 21 \mod 8 &= 5\\
\end{aligned}
\end{equation*}
}

\bPseudoUeberschrift{4 einfügen}

\begin{center}
\begin{tabular}{l|cccccccc}
Bucket    & 0  & 1 & 2     & 3 & 4      & 5      & 6     & 7 \\\hline
Inhalt    & 8  & 9 &       & 3 & $23_2$ & $17_5$ & $1_2$ & 15 \\
\end{tabular}
\end{center}

{\tiny
\begin{equation*}
\begin{aligned}
\text{1. Versuch: } h(4, 0) &= (h'(4) + 0 \cdot 5) \mod 8 &= (4 + 0) \mod 8  &= 4 \text{ (belegt von } 23)\\
\text{2. Versuch: } h(4, 1) &= (h'(4) + 1 \cdot 5) \mod 8 &= (4 + 5) \mod 8  &= 1 \text{ (belegt von } 9)\\
\text{3. Versuch: } h(4, 2) &= (h'(4) + 2 \cdot 5) \mod 8 &= (4 + 10) \mod 8 &= 6 \text{ (belegt von } 1)\\
\text{4. Versuch: } h(4, 3) &= (h'(4) + 3 \cdot 5) \mod 8 &= (4 + 15) \mod 8 &= 3 \text{ (belegt von } 3)\\
\text{5. Versuch: } h(4, 4) &= (h'(4) + 4 \cdot 5) \mod 8 &= (4 + 20) \mod 8 &= 0 \text{ (belegt von } 8)\\
\text{6. Versuch: } h(4, 5) &= (h'(4) + 5 \cdot 5) \mod 8 &= (4 + 25) \mod 8 &= 5 \text{ (belegt von } 17)\\
\text{7. Versuch: } h(4, 6) &= (h'(4) + 6 \cdot 5) \mod 8 &= (4 + 30) \mod 8 &= 2 \\
\end{aligned}
\end{equation*}
}

\begin{center}
\begin{tabular}{l|cccccccc}
Bucket    & 0  & 1 & 2     & 3 & 4      & 5      & 6     & 7 \\\hline
Inhalt    & 8  & 9 & $4_7$ & 3 & $23_2$ & $17_5$ & $1_2$ & 15 \\
\end{tabular}
\end{center}
\end{bAntwort}

%%
% (c)
%%

\item Welches Problem tritt auf, wenn zur Kollisionsauflösung lineares
Sondieren mit Schrittweite 4 verwendet wird? Warum ist 5 eine bessere
Wahl?

\begin{bAntwort}
Beim linearen Sondieren mit der Schrittweite 4 werden nur zwei
verschiedene Buckets erreicht, beispielsweise: 1, 5, 1, 5, etc.

Beim linearen Sondieren mit der Schrittweite 5 werden nacheinander alle
möglichen Buckets erreicht, beispielsweise: 1, 6, 3, 0, 5, 2, 7, 4.
\end{bAntwort}
\end{enumerate}

\begin{bAdditum}
\bPseudoUeberschrift{Kleines Java-Hilfsprogramm zum Ausrechnen der Sondierungen}

\bJavaDatei[firstline=3]{aufgaben/aud/baum/Hashing}
\end{bAdditum}
\end{document}
