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)