From 7e9530364b1407f8e854db89416daf5f2b69b45a Mon Sep 17 00:00:00 2001 From: Christian Bay Date: Thu, 13 Feb 2014 15:03:30 +0100 Subject: [PATCH] BBaum fortgestzt --- BBaum.tex | 75 +++++++++++++++++++++++++++++++++++++++++++ IDB.tex | 1 + pics/bbaumknoten.png | Bin 0 -> 4720 bytes pics/bstern.png | Bin 0 -> 16783 bytes 4 files changed, 76 insertions(+) create mode 100644 BBaum.tex create mode 100644 pics/bbaumknoten.png create mode 100644 pics/bstern.png diff --git a/BBaum.tex b/BBaum.tex new file mode 100644 index 0000000..559316f --- /dev/null +++ b/BBaum.tex @@ -0,0 +1,75 @@ +\section{BBaum} +Idee: Zusammenfassung ganz bestimmter Sätze in einem Block. +Mehrwegbaum: jeder Knoten entspricht einem Block. + +\subsection{Aufbau} +Am Anfang eines jeden Knotens steht $n$. $n$ ist Anzahl der verwendeten +Einträge, $k \leq n \leq 2k$ (in root $ 1 \leq n \leq 2k$). + +\begin{figure}[H] + \begin{center} + \includegraphics[scale=1.0]{pics/bbaumknoten.png} + \caption{BBaum Knoten} + \end{center} +\end{figure} +Danach folgen Tripel (Ki,Di,Pi) welche einen \textbf{Eintrag} bilden: +Ki = Schlüsselwert\\ +Di = Datensatz\\ +Pi = Zeiger auf Nachfolgeknoten +\subsection{Eigenschaften} +\begin{itemize} + \item jeder Pfad ist perfekt balanciert + \item jeder Knoten mit Ausnahme von root und Blättern hat + mindesten $k+1$ Nachfolger und höchstens $2k+1$ + \item jeder Knoten (Ausnahme root) immer mindestens halb voll +\end{itemize} +\subsection{Löschvorgang} +\begin{enumerate} + \item Suche Knoten, in dem der zu löschende Schlüssel S liegt + \item Falls S in Blattknoten, dann lösche S und behandle ggf Unterlauf + \item Fall S in innerem Knoten dann untersuche linken und rechten + Unterbaum von S + \begin{itemize} + \item finde direkten Vorgänger $\text{S}'$ und Nachfolger $\text{S}''$ + \item Wähle dne aus der mehr Elemente hat + \item Ersetze zu löschenden Schlüssel S durch $\text{S}'$ oder $\text{S}''$ aus gewähltem Blattknoten und behandle ggf Unterlauf + + \end{itemize} +\end{enumerate} +\subsection{Unterlauf} +\begin{itemize} + \item Ein endgülter Unterlauf entsteht bei obigen Algorithmus erst auf Blattebene + \item \textbf{Unterlaufbehandlung} wird durch MIschen des Unterlaufknotens mit seinem Nachbarknoten und darüber liegenden Diskriminator durchgeführt $\rightarrow$ Splitt rückwärts + \item Unterlaufbehandlung endet in einem der Blätter! +\end{itemize} +\subsection{B*-Baum} +Alle Sätze werden in den Blattknoten abgelegt. Innere Knoten enthalten nur noch Verzweigungsinformationen, keine Daten. +Am Ende eines Knotens ist ein Zeiger auf den nächsten enthalten am Ende. +\begin{figure}[H] + \begin{center} + \includegraphics[scale=1.0]{pics/bstern.png} + \caption{B*-Baum Aufbau} + \end{center} +\end{figure} +\textbf{Merke:}\\ +Beim Löschen von Werten bleibt der gleiche Diskriminator in inneren +Knoten enthalten. +\subsection{Vergleich} +\begin{itemize} + \item BBaum: + \begin{itemize} + \item keine Redundanz + \item lesen von Baum Inorder nur mit Stack von Höhe h + \item Gergingerer Verzweigungsgrad $\rightarrow$ größere Höhe + \item einige wenige Sätze (root) mit 1 Blockzugirff + \end{itemize} + \item $\text{B}^*$Baum: + \begin{itemize} + \item Schöüsselwerte teilweise redundant + \item Kette von Blattknoten liefert alle Sätze nach Reihenfolge sortiert + \item hohe Verzweigung der inneren Knoten $\rightarrow$ geringe Höhe + \item für alle Blöcke müssen h Sätze gelesen werden + \item Schlüsselwerte der inneren Knoten müssen nicht in den + Datensätzen vorkommen + \end{itemize} +\end{itemize} diff --git a/IDB.tex b/IDB.tex index 152fe01..03ae93d 100644 --- a/IDB.tex +++ b/IDB.tex @@ -77,6 +77,7 @@ \newpage \include{./Einfuehrung} \include{./Saetze} +\include{./BBaum} \include{./Speicherung} \include{./Anfrageverarbeitung} \include{./Relationale_Operatoren} diff --git a/pics/bbaumknoten.png b/pics/bbaumknoten.png new file mode 100644 index 0000000000000000000000000000000000000000..6cb04ee42adb20ec098260364017c10127c4fe9f GIT binary patch literal 4720 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 literal 0 HcmV?d00001 diff --git a/pics/bstern.png b/pics/bstern.png new file mode 100644 index 0000000000000000000000000000000000000000..5fb5445d5e5aa9208e573473a08bfffb1ae951df GIT binary patch literal 16783 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 G@c#g2CQ$eQ literal 0 HcmV?d00001