2014-02-13 15:03:30 +01:00
\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 2 k $ (in root $ 1 \leq n \leq 2 k $ ).
\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 $ 2 k + 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 } '' $
2014-02-15 18:04:35 +01:00
\item Wähle den aus der mehr Elemente hat
2014-02-13 15:03:30 +01:00
\item Ersetze zu löschenden Schlüssel S durch $ \text { S } ' $ oder $ \text { S } '' $ aus gewähltem Blattknoten und behandle ggf Unterlauf
2014-02-13 16:44:53 +01:00
2014-02-13 15:03:30 +01:00
\end { itemize}
\end { enumerate}
\subsection { Unterlauf}
\begin { itemize}
\item Ein endgülter Unterlauf entsteht bei obigen Algorithmus erst auf Blattebene
2014-02-15 18:04:35 +01:00
\item \textbf { Unterlaufbehandlung} wird durch Mischen des Unterlaufknotens mit seinem Nachbarknoten und darüber liegenden Diskriminator durchgeführt $ \rightarrow $ Splitt rückwärts
2014-02-13 15:03:30 +01:00
\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.
2014-02-15 18:04:35 +01:00
Am Ende eines Knotens ist ein Zeiger auf den nächsten enthalten.
2014-02-13 15:03:30 +01:00
\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.
2014-02-13 16:44:53 +01:00
\subsubsection { Löschen}
2014-02-15 18:04:35 +01:00
Entsteht durch das Löschen ein Unterlauf?
2014-02-13 16:44:53 +01:00
\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}
2014-02-13 15:03:30 +01:00
\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}
2014-02-15 18:04:35 +01:00
\item Schlüsselwerte teilweise redundant
2014-02-13 15:03:30 +01:00
\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}
2014-02-13 16:44:53 +01:00
\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)