\documentclass{bschlangaul-aufgabe} \bLadePakete{baum,spalten,mathe} \begin{document} \bAufgabenMetadaten{ Titel = {Aufgabe 5}, Thematik = {Binärer Suchbaum}, Referenz = 66115-2018-H.T1-A5, RelativerPfad = Examen/66115/2018/09/Thema-1/Aufgabe-5.tex, ZitatSchluessel = examen:66115:2018:09, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {AVL-Baum}, EinzelpruefungsNr = 66115, Jahr = 2018, Monat = 09, ThemaNr = 1, AufgabeNr = 5, } Hinweis: Wir betrachten in dieser Aufgabe binäre Suchbäume, bei denen jeder innere Knoten genau zwei Kinder hat. Schlüssel werden nur in den inneren Knoten gespeichert - die Blätter speichern keinerlei Informationen.\index{AVL-Baum} \footcite{examen:66115:2018:09} \begin{enumerate} \item Welche Eigenschaften muss ein binärer Suchbaum haben, damit er ein AVL-Baum ist? \begin{bAntwort} Er muss die zusätzliche Eigenschaft haben, dass sich an jedem Knoten die Höhe der beiden Teilbäume um höchstens eins unterscheidet \end{bAntwort} \item Mit $n(h)$ bezeichnen wir die minimale Anzahl innerer Knoten eines AVL-Baums der Höhe $h$. \begin{enumerate} %% % (a) %% \item Begründen Sie, dass $n(1) = 1$ und $n(2) = 2$. %% % (b) %% \item Begründen Sie, dass $n(h) = 1 + n(h - 1) + n (h - 2)$. %% % (c) %% \item Folgern Sie, dass $n(h) > 2^{\frac{h}{2}-1}$. \end{enumerate} \item Warum ist die Höhe jedes AVL-Baums mit $n$ inneren Knoten $O(\log n)$? \item Fügen Sie die Elemente (45, 16, 79, 31, 51, 87, 49, 61) in der angegebenen Reihenfolge in einen anfangs leeren binären Suchbaum ein (ohne Rebalancierungen). Zeichnen Sie den resultierenden Suchbaum nach jeder Einfügeoperation. \begin{bAntwort} \begin{multicols}{2} \begin{bBaum}{Einfügen von „45“} \begin{tikzpicture}[b binaer baum] \Tree [.45 ] \end{tikzpicture} \end{bBaum} \begin{bBaum}{Einfügen von „16“} \begin{tikzpicture}[b binaer baum] \Tree [.45 [.16 ] \edge[blank]; \node[blank]{}; ] \end{tikzpicture} \end{bBaum} \begin{bBaum}{Einfügen von „79“} \begin{tikzpicture}[b binaer baum] \Tree [.45 [.16 ] [.79 ] ] \end{tikzpicture} \end{bBaum} \begin{bBaum}{Einfügen von „31“} \begin{tikzpicture}[b binaer baum] \Tree [.45 [.16 \edge[blank]; \node[blank]{}; [.31 ] ] [.79 ] ] \end{tikzpicture} \end{bBaum} \begin{bBaum}{Einfügen von „51“} \begin{tikzpicture}[b binaer baum] \Tree [.45 [.16 \edge[blank]; \node[blank]{}; [.31 ] ] [.79 [.51 ] \edge[blank]; \node[blank]{}; ] ] \end{tikzpicture} \end{bBaum} \begin{bBaum}{Einfügen von „87“} \begin{tikzpicture}[b binaer baum] \Tree [.45 [.16 \edge[blank]; \node[blank]{}; [.31 ] ] [.79 [.51 ] [.87 ] ] ] \end{tikzpicture} \end{bBaum} \begin{bBaum}{Einfügen von „49“} \begin{tikzpicture}[b binaer baum] \Tree [.45 [.16 \edge[blank]; \node[blank]{}; [.31 ] ] [.79 [.51 [.49 ] \edge[blank]; \node[blank]{}; ] [.87 ] ] ] \end{tikzpicture} \end{bBaum} \begin{bBaum}{Einfügen von „61“} \begin{tikzpicture}[b binaer baum] \Tree [.45 [.16 \edge[blank]; \node[blank]{}; [.31 ] ] [.79 [.51 [.49 ] [.61 ] ] [.87 ] ] ] \end{tikzpicture} \end{bBaum} \end{multicols} \end{bAntwort} \item Ist der resultierende Suchbaum aus Teilaufgabe 5.4 ein AVL-Baum? Begründen Sie Ihre Antwort. \begin{bAntwort} Ja, wie in der untenstehenden Grafik zu sehen ist, unterscheiden sich die Höhe der Teilbäume von allen Knoten nur um höchstens eins. \begin{tikzpicture}[b binaer baum] \Tree [.\node[label=+1]{45}; [.\node[label=+1]{16}; \edge[blank]; \node[blank]{}; [.\node[label=0]{31}; ] ] [.\node[label=-1]{79}; [.\node[label=0]{51}; [.\node[label=0]{49}; ] [.\node[label=0]{61}; ] ] [.\node[label=0]{87}; ] ] ] \end{tikzpicture} \end{bAntwort} \item Das Einfügen in einen AVL-Baum funktioniert (zunächst) wie beim binären Suchbaum durch Erweitern eines äußeren Knotens w: vor dem Einfügen von 54 nach dem Einfügen von 54 Anschließend wird die AVL-Baum Eingenschaft (falls notwending) durch eine (Doppel-)Rotation wiederhergestellt: Wenn z der erste Knoten auf dem Pfad P von w zur Wurzel ist, der nicht balanciert ist, y das Kind von z auf P und r das Kind von y auf P, und wenn (a, b,c) die Inorder-Reihenfolge von x, y, 2 ist, dann führen wir die Rotation aus, die benötigt wird, um b zum obersten Knoten der drei zu machen. Die folgende Illustration zeigt den Fall, dass key(y) < key(x) < key(z), \dh (a,b,c) = (y,x,z), wobei w ein Knoten in Ty ist. Sei Ah die Höhe des Teilbaums 73. Für i = 0,1,2 sei h; die Höhe des Teilbaums T; und für v = 2,y,z sei h, die Höhe des Teilbaums mit der Wurzel v vor der Restrukturierung. Begründen Sie, dass \begin{enumerate} %% % (a) %% \item $h_0 = h$ %% % (b) %% \item $h_1 = h - 1$ %% % (c) %% \item $h_2 = h$ %% % (d) %% \item $h_x = h + 1$ %% % (e) %% \item $h_y = h + 2$ %% % (f) %% \item $h_z = h + 3$ \end{enumerate} \item Welche Höhe haben die Teilbäume mit den Wurzeln x, y, z nach der Restrukturierung? Begründen Sie Ihre Antworten. \item Begründen Sie, dass die oben gezeigte Doppelrotation die AVL-Baum-Eigenschaft wiederherstellt. \item Beschreiben Sie, wie ein binärer Baum der Höhe h in einem Array repräsentiert werden kann. Wie viel Speicherplatz ist für so eine Darstellung erforderlich? \item Warum verwendet man bei der Implementierung von AVL-Bäumen eine verzeigerte Struktur und nicht eine Array-basierte Repräsentation? \end{enumerate} \end{document}