\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. \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 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} \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)