mirror of
https://gitlab.cs.fau.de/ik15ydit/latexandmore.git
synced 2024-11-24 04:29:34 +01:00
113 lines
4.5 KiB
TeX
113 lines
4.5 KiB
TeX
\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 den 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.
|
|
\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.
|
|
\subsubsection{Löschen}
|
|
Entsteht durch das Löschen ein Unterlauf?
|
|
\begin{itemize}
|
|
\item Nein:\\Entferne Satz aus Blatt
|
|
\item Ja:\\
|
|
Mische das Blatt mit einem Nachbarknoten. Ist die
|
|
Summe der Einträge in beiden Knoten größer als 2k?
|
|
\begin{itemize}
|
|
\item Nein:\\
|
|
Fass beide Blätter zu einem Blatt zusammen. Falls Unterlauf
|
|
in Vaterknoten entsteht: Misch die inneren Knoten analog
|
|
\item Ja:\\
|
|
Teil die Sätze neu auf beide Knoten auf, so dass ein Knoten
|
|
jeweils die Hälfte der Sätze übernimmt. Der Diskriminator ist
|
|
zu aktualisieren.
|
|
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\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 Schlü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}
|
|
\subsection{Bitmap Index}
|
|
\textbf{B-Bäume (und Hashing) machen nur Sinn bei hoher Selektivität! ($\approx 5\%$)}
|
|
Lege für jeden Schlüsselwert eine Bitliste an. Bitwert 1 bedeutet, der
|
|
Schlüssel hat im Satz den Wert zu dem die Liste gehört. 0 bedeutet er hat keinen anderen Wert.\\
|
|
Gut bei Wertigkeiten bis ca. 500. Hilft bei einfacher und effizienter
|
|
Verknüpfung.
|
|
|
|
\subsection{Primär- und Sekundär-Organisation}
|
|
\textbf{Primär-Organisation}:\\
|
|
Bedeutung: Speicherung der Sätze selbst.
|
|
|
|
\textbf{Sekundär-Organisation}:\\
|
|
Bedeutung: verweist nur auf Sätze, die nach beliebigen anderen Kriterien
|
|
abgespeichert werden. Ist allerdings nur möglich, wenn Primärorganisation
|
|
Direktzugriff auf einzelnen Satz haben.
|
|
|
|
$\rightarrow$ B-Baum/$\text{B}^*$Baum als Sekundär Organsiation (Di);
|
|
auch gestreute Speicherung als Sekundär Organsiation möglich (Buckets
|
|
[Schlüsseltwer,Satzadresse] Paare)
|