Datenstrukturen Teil 4 Bäume zur Codierung und B

Werbung
Datenstrukturen Teil 4
Bäume zur Codierung und BBäume
Codebäume
Entropiekodierung
●
●
●
Bezeichnet eine verlustfreie
Datenkompression
Dabei werden den einzelnen Zeichen
unterschiedlich lange Bitfolgen als
Codesegmente zugeordnet
Idee dabei ist, das die Zeichen mit dem
häufigsten Vorkommen den kürzesten
Code erhalten
Entropiekodierung
●
●
Allerdings kann es hier keinen „naiven“
Ansatz geben und Codes „einfach so“
vergeben werden
Beispiel:
–
A: 0
–
B: 1
–
C: 01
–
D: 10
–
ABCD = 010110 = CCD oder ABABD ...
Entropiekodierung
●
●
●
●
●
Hier sind Mehrdeutigkeiten entstanden
Der Code ist nicht mehr eindeutig
decodierbar
Lösung: der Code muß die Eigenschaft
„präfixfrei“ haben
Präfixfrei: Kein Codesegment darf als
Präfix (Anfang) eines anderen
Codesegment auftauchen
Wie kann ein präfixfreier Code erzeugt
werden ?
Entropiekodierung
●
●
●
●
Präfixfreie Codes können durch
Binärbäume erzeugt werden
Dabei stehen die Blätter für die codierten
Zeichen
Der Weg von der Wurzel zu einem Blatt
bestimmt den Code des Datums im Blatt
Dazu muß die Verzweigung des Baumes
belegt werden, z.B. mit
–
Pfad zum linken Kind = 0
–
Pfad zum rechten Kind = 1
Entropiekodierung
●
Beispiel:
●
Codierung:
●
Alternativen:
Entropiekodierung
●
Nach der Codierung Links->0, Rechts->1
ergibt sich für ABCD:
–
●
●
●
0001100110
Zur Dekodierung wird die Zeichenfolge im
Baum abgearbeitet (gesucht)
Wird ein Blatt erreicht, wird mit dem
nächsten Bit wieder in der Wurzel
angefangen
Problem ist nun, wie der Codebaum
eigentlich erstellt wird
Huffman
●
●
●
Die meisten Algorithmen, die einen
Codebaum erzeugen, arbeiten auf der
Häufigkeit der zu codierenden Daten /
Zeichen
Dabei werden die Zeichen gemäß ihrer
Häufigkeit sortiert und dann in einen Baum
eingefügt
Der optimale Algorithmus dafür (math.
Beweisbar) ist der von David A. Huffman
Huffman – Codebaum erzeugen
●
Algorithmusschritte:
–
Erstelle einen „Wald“ mit Bäumen für jedes
Zeichen, jeder Baum hat nur das Zeichen als
Knoten
–
Suche zwei Bäume mit der niedrigsten
Auftrittswahrscheinlichkeit (Häufigkeit)
–
Erstelle aus ihnen einen neuen Baum, dessen
Wurzel die Summe der beiden
Wahrscheinlichkeiten hat
–
Wiederhole, bis nur noch ein Baum übrig ist
Huffman – Codebaum erzeugen
B-Bäume
B-Bäume
●
●
●
Sollte die Speicherung der Daten, die in
einem Baum dargestellt sind, nicht im
Speicher sondern (was z.B. bei
Datenbanken der Fall ist) auf einem
Massenspeicher erfolgen, so haben
Binärbäume einen eklatanten Nachteil
Die Operationen Löschen, Suchen,
Einfügen benötigen beim Binärbaum
aufgrund seiner Struktur eine Vielzahl an
wahlfreien Zugriffen
Schlechte Performance ist die Folge
B-Bäume
●
●
●
●
Lösung hierfür sind die Mehrwegbäume,
insbesondere die B-Bäume
Knoten in Mehrwegbäumen können mehr
als zwei Kinder haben
Dadurch werden sie „flacher“ und es sind
weniger Zugriffsschritte auf die Knoten
nötig
B-Bäume sind spezielle Mehrwegbäume,
die eine besondere Definition haben
B-Bäume
●
Definition
–
Jeder Pfad von der Wurzel zu einem Blatt hat
gleiche Länge
–
Jeder Knoten außer der Wurzel und den
Blättern hat mindestens k + 1 Kinder
(Unterbäume). Die Wurzel ist entweder ein
Blatt oder hat mindestens 2 Kinder
–
Jeder Knoten hat höchstens 2k + 1 Kinder
–
Jedes Blatt hat höchstens 2k Einträge und
(mit Ausnahme der Wurzel als Blatt)
mindestens k Einträge
–
In den Knoten sind die Schlüssel aufsteigend
sortiert
B-Bäume
●
●
B-Bäume werden in Klassen aufgeteilt
Eine Klasse von k bedeutet, daß jeder
Knoten außer der Wurzel minimal k
Schlüssel (also k+1 Nachfolger) und
maximal 2k Schlüssel (also 2k+1
Nachfolger) besitzt.
B-Bäume - Suchen
●
Ist eine verallgemeinerte Form der Suche im
Binärbaum
–
Beginnt mit dem Wurzelknoten r als aktuellem Knoten x
–
Ist x ein innerer Knoten, wird die Position j des kleinsten Schlüssels bestimmt,
der größer oder gleich k ist.
●
Existiert eine solche Position j,
aber ist k != x.kj, kann der gesuchte Schlüssel nur in dem Unterbaum
mit Wurzel x.cj enthalten sein. Die Suche wird daher mit Schritt 2 und
dem Knoten x.cj als aktuellem Knoten fortgesetzt.
– ansonsten wurde der Schlüssel gefunden und (x,j) wird als Ergebnis
zurückgeliefert.
Existiert keine solche Position, ist der Schlüssel größer als alle im aktuellen
Knoten gespeicherten Schlüssel. In diesem Fall kann der gesuchte
Schlüssel nur noch in dem Unterbaum enthalten sein, auf den der letzte
Kindverweis x.cx.s + 1 zeigt. In diesem Fall wird die Suche mit Schritt 2 und
dem Knoten x.cx.s + 1 als aktuellem Knoten fortgesetzt.
–
●
–
Ist x ein Blattknoten,
●
●
Wird k in den Schlüsseln von x gesucht.
Wenn der Schlüssel an Position j gefunden wird, ist das Ergebnis (x,j),
ansonsten nicht enthalten.
B-Bäume - Suchen
B-Bäume - Einfügen
●
Einfügen geschieht immer in einem
Blattknoten
–
In einem vorbereitenden Schritt wird der
Blattknoten x gesucht, in den eingefügt
werden muss. Dabei werden Vorkehrungen
getroffen, damit die Einfügeoperation nicht die
B-Baum-Bedingungen verletzt und einen
Knoten erzeugt, der mehr als 2t − 1 Schlüssel
enthält.
–
In einem abschließenden Schritt wird k unter
Berücksichtigung der Sortierreihenfolge lokal
in x eingefügt.
B-Bäume - Einfügen
●
Die Suche nach x läuft bis auf zwei
Unterschiede wie die normale Suche ab:
–
Die Suche bricht nicht in einem inneren Knoten ab,
wenn dort der Schlüssel k bereits gefunden wird. Es
findet immer ein Abstieg zu einem Blattknoten statt.
–
Bevor die Suche zu einem Kindknoten x.cj absteigt,
wird überprüft, ob x.cj voll ist, d. h. bereits 2t − 1
Schlüssel enthält. In diesem Fall wird x.cj vorsorglich
geteilt. Dies garantiert, dass die Einfügeoperation mit
einem einzigen Baumabstieg durchgeführt werden
kann und keine anschließenden
Reparaturmaßnahmen zur Wiederherstellung der BBaum-Bedingungen durchgeführt werden müssen.
B-Bäume - Einfügen
B-Bäume - Einfügen
●
●
●
Neue Schlüsselwerte werden in
Sortierordnung in den Blättern gespeichert
Wenn ein Blatt überläuft, wird es gesplittet,
und der mittlere Schlüssel in den
Elternknoten aufgenommen
Wenn der Elternknoten selber schon voll
ist, dann kann sich das Splitten bis zur
Wurzel fortsetzen
B-Bäume - Löschen
●
Beim nächsten Mal ....
Herunterladen