Ausarbeitung - TU Chemnitz

Werbung
Proseminar
Kodierverfahren
bei Dr. Ulrich Tamm Sommersemester 2003
Thema: Codierung von Bäumen (Prüfer Codes...)
Inhalt:
Einleitung, Begriffe
Baumtypen und deren Kodierung
Binäre Bäume
Mehrwegbäume
Prüfer Code
Literatur
Einleitung, Begriffe
Ein Baum ist eine endliche Menge von Knoten und Kanten, wobei Kanten die Knoten von der
Wurzel zu den Blättern gerichtet verbinden. Es unterscheidet sich von Listen dadurch, daß bei
Bäumen Verzweigungen möglich sind. Bäume sind Hilfsmittel zur Realisierung
verschiedener Probleme z. B. Kodieren, Suchen, Sortieren.
Ein Knoten ist ein einfaches Objekt, das einen Namen hat und andere mit ihm verknüpfte
Informationen tragen kann. Ein Knoten hat höchstens einen Vorgänger, kann aber mehrere
Nachfolger haben.
Ein Blatt ist ein Knoten, der keine Nachfolger hat.
Eine Kante ist eine Verbindung zwischen zwei Knoten.
Ein Pfad in einem Baum ist eine Liste von unterschiedlichen Knoten, in welcher
aufeinanderfolgende Knoten durch Kanten im Baum verbunden sind.
Eine Wurzel des gesamten Baumes ist ein Knoten ohne Vorgänger.
Es gibt zwischen der Wurzel und allen anderen beliebigen Knoten genau einen Pfad. Wenn es
zwischen der Wurzel und einem beliebigen Knoten mehr als einen Pfad gibt, oder keinen Pfad
gibt, dann sprechen wir nicht über Bäume.
Jeder Knoten eines Baumes ist die Wurzel eines der Unterbäume innerhalb des Baumes. Die
Zahl der Unterbäume eines Knotens wird als Grad bezeichnet.
Die Knoten eines Baumes kann man in Ebenen (Generationen, Stufen) einteilen. Die Ebene
(Höhe) eines Knotens ist die Anzahl der Knoten auf dem Pfad von der Wurzel zu ihm, die
Wurzel zählt man als nullte Ebene.
Kinder desselben Knotens heißen Geschwister.
Die Tiefe eines Baumes ist die Nummer der größten Ebene des Baumes.
Das Kodealphabet ist eine Menge von Zeichen, die bei einer bestimmten Kodierung
zugelassen sind z.B. bei binäre Kodierung {0,1}.
Baumtypen und deren Kodierung:
Binäre Bäume
Ein binärer Baum ist eine endliche Menge von Elementen mit der Eigenschaft, daß die Menge
entweder leer ist, oder daß ein ausgezeichnetes Element die Wurzel existiert und die
Restmenge in zwei dis junkte Menge zerlegbar ist, welche wieder Bäume sind, deren Wurzeln
rechter und linker Sohn ein gemeinsamer Vorgänger sind. Alle Knoten haben also maximal
zwei Nachfolgerknoten.
AVL Bäume (Adelson-Velskii und Landis)
Ein AVL Baum ist ein binärer Baum mit der Eigenschaft, daß die Höhe der von jedem Knoten
ausgehenden Teilbäume sich maximal um 1 unterscheiden darf.
Durch das Einfügen eines Knotens wird der Baum im Idealfall vollständig ausgeglichen.
Wenn das Einfügen des Ausgleichheitskriterium verletzt ist, muß der Baum balanciert
werden.
1.) Wir kodieren den ganzen Baum mit dem Kriterium: Ein Knoten hat entweder zwei
Nachfolger - d.h. es ist nicht gestattet, daß ein Knoten nur einen Nachfolger hat - oder keinen
Nachfolger, er ist also ein Blatt. Wir kodieren die Blätter mit 0, die inneren Knoten
einschließlich der Wurzel mit 1. Das Kodealphabet ist hier {0,1}. In diesem Fall kann ein
Kodewort nur dann mit 0 anfangen, wenn der Baum nur aus einer Wurzel besteht. Da wir den
Baum von links nach rechts durchsuchen, ist unser letzter Knoten immer ein Blatt, muß also
das Kodewort immer mit zwei 0en enden.
Konvertierung eines Kodewortes in einen Baum:
11110010000:
2.) Wir kodieren den ganzen Baum mit dem Kriterium: Ein Knoten kann einen, zwei, oder
keinen Nachfolger besitzen. Wir bezeichnen die Blätter mit 0, die Knoten die einen oder zwei
Nachfolger haben mit 1. In diesem Fall kann ein Kodewort auch dann und nur dann mit 0
anfangen, wenn der Baum aus einer einzigen Wurzel besteht, d.h. z. B. das Kodewort 01100
ist nicht zugelassen. Das Kodewort muß hier immer mit mindestens einer 0 beendet werden,
da es sein kann, daß der „letzte“ innere Knoten nur einen Nachfolger hat.
Aus einem Kodewort kann man hier einen Baum nicht eindeutig darstellen:
1100:
Begriff: Ein Kode (ein Kodewort) heißt gleichzeitig, wenn man aus dem Kodewort die
Information (Knoten, Baum) eindeutig ablesen kann. In diesem Fall ist der Kode 1100 nicht
gleichzeitig.
3.) Wir kodieren die einzelne n Knoten des Ba umes so, daß die Wurzel kein Kodewort hat,
ihr linker Nachfolger hat den Kode 0, ihr rechter Nachfolger 1. Alle anderen Knoten, die
weitere Nachfolger haben sind so kodiert. So ist die Länge der Kodeworte beider Knoten in
der ersten Ebene 1, die Länge der Kodeworte aller Knoten in der zweiten Ebene 2, die Länge
des Kodewortes in der n-ten Ebene ist n.
Aus allen Kodewörtern kann man hier den einzelnen Knoten eindeutig ablesen, d.h. die
Kodewörter sind hier gleichzeitig.
1100101
Mehrwegbäume (zwei, drei, vier und n-Weg Bäume)
2-3-4-Wege-Bäume
Mehr Flexibilität gegenüber herkömmlichen binären Suchbäumen durch 3 Knoten und 4
Knoten. Beim Einfügen eines Elements wird die passende Stelle im Baum gesucht. Wenn hier
gerade ein, zwei, oder drei Knoten stehen, dann wird er um das neue Datenelement erweitert.
Wenn dort gerade 4 Knoten stehen, kann er kein weiteres Element aufnehmen, und muß vor
dem Einfügen in zwei Knoten zerlegt werden.
B-Bäume
Ein B-Baum ist ein ausgeglichener Suchbaum, (d.h. nur in der untersten Generation dürfen
die Kinder fehlen), bei dem mehrere Schlüsselwerte pro Knoten zulässig sind, die in diesem
Knoten sortiert sind und jeweils eine weitere Such- oder Datenreferenz besitzen. In jedem
Knoten kann also die Anzahl der Nachfolger variieren.
1.) Wir kodieren den ganzen Baum so, daß der Kode des Knoten 0 ist, wenn er keinen
Nachfolger hat, 1, wenn ein, 2, wenn zwei, 3, wenn drei, 4, wenn vier Nachfolger
vorhanden sind.
2.) Hier kann man auch den einzelnen Knoten kodieren.
Die Kodewörter einzelner Knoten kann man analog, wie bei binären Bäumen eindeutig
ablesen.
n-Wege-Bäume
Ein n-Wege Suchbaum ist ein Baum B, in dem alle Knoten einen Grad <=n besitzen. Der ist
entweder leer, oder hat die folgenden Eigenschaften:
-Jeder Knoten des Baums mit b Einträgen, b<=n-1, hat folgende Struktur: Die Pi , 0<=i<=b,
sind Zeiger auf die Unterbäume des Knotens und die Ki und Di , 1<=i<=b sind
Schlüsselwerte und Daten.
b
K1
D1
K2
D2
...
Kb
Db
P0
P1
P2
Pb
-Die Schlüsselwerte im Knoten sind aufsteigend geordnet: Ki<=Ki+1 , 1<=i<b
-Alle Schlüsselwerte im Unterbaum von P kleiner als der Schlüsselwert Ki+1 0<=i<=b.
-Alle Schlüsselwerte im Unterbaum von Pb sind größer als der Schlüsselwert Kb.
-Die Unterbäume von Pi , 0<=i<=b sind auch n-Wege-Suchbäume.
Die n-Wege Bäume kodiert man analog, wie die 2-3-4-Bäume, Unterschied ist nur, daß das
Kodealphabet größer ist (von 0 bis n).
Prüfer Code
Einen Baum mit n Knoten kann man n auf Formen darstellen. Ich gebe die
Darstellungsformen von n=2 bis n=4 an. In Klammern stehen die Knoten, die keine Wurzel
sind.
Alle Bäume haben mindestens zwei Knoten mit dem Grad 1, d.h. alle Bäume haben
mindestens zwei Blätter. Wir wählen deshalb das Blatt mit dem niedrigsten Wert aus, welches
eindeutig determiniert ist, und es wird dann das Symbol in den Kode genommen. Dieser
Knoten wird dann gelöscht und der Vorgang wird wiederholt, bis eine einzelne Kante übrig
bleibt, was insgesamt zu n-2 Zahlen zwischen 1 und n führt. Man kann das obige Verfahren in
folgender Weise darstellen: Wir löschen erst den Knoten 4, der zur Wurzel (Knoten 1)
gehört. Unser nächst niedrig markiertes Blatt ist 6, das zu 2 gehört. Dann ist 2 ein Blatt
geworden, was das niedrigste ist und zu 1 gehört. So ist die „ehemalige Wurzel“ ein Blatt
geworden, das wir nun löschen sollen, da es das niedrigstwertige ist. Analog löschen wir dann
den Knoten 7, der zum Knoten 3 gehört, dann den Knoten 3, der zu Knoten 5 gehört. So ist
unser Kode 121335.
Literatur
-Robert Sedgewick: Algorithmen
-Daniel Schaerer: Listen, Bäume und Graphen als Objekte
-Te Sun Han, Kingo Kobayashi: Mathematics of Information and Coding
-Donald L. Kreher, Douglas R. Stinson: Combinatorial Algorithms: generation, enumeration,
and search
-Prof. Dr. Dieter Happel: Diskrete Strukturen (Vorlesungscript 1998)
Herunterladen