diff --git a/305_RBT.tex b/305_RBT.tex index b384954c9f82aaf65b781071df67ab63e4da55f5..d2ef4aa2e205b832db89af020017d0dda243dd4e 100644 --- a/305_RBT.tex +++ b/305_RBT.tex @@ -41,8 +41,8 @@ Wir notieren RBT über einen Datentyp $D$ analog zu BST und speichern lediglich \end{align*} Per Konvention nehmen wir an, dass der Wurzelknoten immer Schwarz ist. -Wenn der kürzeste vorstellbare Pfad von der Wurzel zu einem Blatt in einem RBT-Tree durch $l$ ausschließlich durch schwarze Knoten geht, ist der längste -Pfad dann durch $2l$ Knoten, immer einen Schwarzen und einen roten. Dadurch ist gewährleistet, dass das höchste Blatt +Wenn der kürzeste vorstellbare Pfad von der Wurzel zu einem Blatt in einem RBT-Tree durch $h'$ ausschließlich durch schwarze Knoten geht, ist der längste +Pfad dann durch $2h'$ Knoten, immer einen Schwarzen und einen roten. Dadurch ist gewährleistet, dass das höchste Blatt maximal halb so hoch hängt wie eins auf der untersten Ebene. Dadurch folgt: @@ -52,6 +52,8 @@ Dadurch folgt: \end{lemma} Die Details des Beweises sind eine Übungsaufgabe. +Umgekehrt ist die Kapazität eines RBT zwischen $2^{h'}$ und $4^{h'}$. + \subsection{Einfügen in Red-Black-Trees} Da RBT insbesondere Binäre Suchbäume sind, sind die Operationen zum Suchen von Elementen, dem Finden des Maximums, @@ -152,8 +154,29 @@ kann: \label{lemma:rbt_amortisiert} \end{lemma} \begin{proof} - -\end{proof}<++> + Wir beobachten zuerst, dass sich bei einer Anwendung der Regel (3.5) die Kapazität des entsprechenden Teilbaums + verdoppelt: In jeder der vier Ausgangsfälle in Abbildung \ref{fig:rbt_balance} beträgt die Kapazität maximal + $4^{h'}$, wobei $h'$ hier die Anzahl der zu durchwandernden schwarzen Knoten auf den von der Wurzel dieses Teilbaums zu + einem Blatt beschreibt. + + Nach der Umstrukturierung hat jedoch jeder Teilbaum mit der Wurzel $x$ bzw $z$ die maximale Kapazität $4^{h'}$, d.h. + der Teilbaum mit $y$ als Wurzel hat $2 4^{h'}$ Kapazität. + + Dadurch ergeben sich beim Einfügen die in Abbildung \ref{fig:RBT_aufwand} skizzierten Schreibaufwände - eine Umstrukturierung + in der $i.$ Ebene ist doppelt so häufig wie in der Ebene $(i-1)$. + + Akkumuliert man also über $k=2^l$ mal subsequent einfügen, ergeben sich eine folgende Anzahl von Schreiboperationen: + \[ + 2^l + 2^{l-1} + 2^{l-2} + \dots + 2^0 ≤ 2^{l+1} = 2*k, + \] + und damit amortisiert über $k$ Schritte $\mathcal{O}(1)$ Aufwand. +\end{proof} + +\begin{figure}[h] + \centering + \input{bilder/RBT_aufwand.tex} + \label{fig:RBT_aufwand} +\end{figure}