Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens [email protected] Elementare Datenstrukturen Array Linked List Stack Queue Tree (Feld) (Verkettete Liste) (Stapel) (Warteschlange) (Baum) 2 1 Sortierbaum Der binäre Suchbaum kann auch “Sortierbaum” genannt werden. Es lassen sich sehr einfache Algorithmen definieren, die eine aufsteigend oder absteigend sortierte Reihenfolge der Daten ausgeben. 3 Sortierverfahren Will man eine unsortierte Wertefolge sortieren, dann kann man aus dieser Wertefolge einen Sortierbaum aufbauen und diesen nach LWR ( aufsteigend) RWL ( absteigend) auslesen. Dabei entsteht dann die sortierte Wertefolge. 4 2 Sortierverfahren Beispiel 16, 8, 24, 4, 12, 20, 28, 2, 14, 26, 18, 22, 30, 8, 10, 1, 9, 23, 25, 27, 29, 11, 13, 15, 17, 3, 5, 7, 19, 21, 31 Gegeben ist eine unsortierte Folge von Zahlen... 5 Sortierverfahren ...daraus wird ein Sortierbaum aufgebaut... 16 24 8 4 2 1 6 3 20 12 5 10 7 9 14 11 13 28 15 17 26 22 18 19 21 23 25 30 27 31 29 6 3 Sortierverfahren ...der dann nach LWR oder RWL durchlaufen und ausgelesen wird. LWR: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 RWL: 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 7 Aufbau binärer Suchbaum Bisher kennen wir folgenden Algorithmus zum Aufbau eines binären Suchbaums: Beim leeren Baum wird der erste Wert in einen neu geschaffenen Knoten untergebracht und unter dem root-Pointer eingehängt. 8 4 Aufbau binärer Suchbaum Weitere Knoten wie folgt eingehängen: bei root beginnend im Baum absteigen, bis ein Nullpointer erreicht wird. wenn neuer Wert kleiner als aktueller Knotenwert, dann links absteigen wenn neuer Wert größer, dann rechts absteigen. Neuen Knoten anstelle des gefundenen Nullpointers einhängen. 9 Nachteil Die Form des nach diesem Algorithmus entstehenden Baumes hängt stark ab von den eingegliederten Daten. Bei bereits sortierten Daten entsteht eine lineare Liste. 10 5 Ideal Ideal wäre es, wenn der binäre Suchbaum immer die minimale Höhe hat, da dann die Suchzeit minimiert wird. Wir brauchen also ein Verfahren, um einen Baum mit minimaler Höhe aufbauen zu können! 11 Unsymmetrie durch löschen Beim Löschen von Knoten kann auch ein Baum entstehen, der stark unsymmetrisch ist. Dann ist eine Reorganisation des Baumes sinnvoll um wieder die minimale Höhe zu erhalten. 12 6 Reorganisieren Gründe für den Neuaufbau eines Binärbaums: um starke Unsymmetrien zu beseitigen ( minimieren der Höhe) um den Baum zu regenerieren, nachdem man ihn am Ende einer Arbeitssitzung in eine Datei abgespeichert hatte 13 Reorganisieren Das folgende Verfahren ermöglicht den Neuaufbau des Baumes bei gleichzeitiger Erzielung größerer Symmetrie. Zunächst aber noch einige Beobachtungen. 14 7 voller binärer Suchbaum 16 24 8 4 2 1 6 5 3 20 12 10 9 7 14 11 13 28 15 17 26 22 18 21 19 25 23 30 27 31 29 Dieser Baum weist einige Besonderheiten auf: 15 voller binärer Suchbaum 16 24 8 4 2 1 6 3 20 12 5 10 7 9 14 11 13 28 15 17 26 22 18 19 21 23 25 30 27 29 31 ist ein voller Baum und trägt die lückenlosen Werte von 1 bis 31 16 8 voller binärer Suchbaum 16 24 8 4 2 1 6 5 3 20 12 10 9 7 14 11 13 28 15 17 26 22 18 21 19 25 23 30 27 31 29 Inorder-Durchlauf: Knotenwert entspricht der Reihenfolge-Nummer des Knotens beim Durchlauf 17 voller binärer Suchbaum 16 24 8 4 2 1 6 3 20 12 5 10 7 9 14 11 13 28 15 17 26 22 18 19 21 23 25 30 27 29 31 alle Knoten mit ungerader Knotennummer liegen auf der zeichnerisch untersten Ebene 18 9 voller binärer Suchbaum 16 24 8 4 2 1 6 5 3 20 12 10 9 7 14 11 13 28 15 17 26 22 18 21 19 25 23 30 27 31 29 alle Knoten, deren Wert durch 2 aber nicht durch 4 teilbar ist, liegen auf der zweituntersten Ebene 19 voller binärer Suchbaum 16 24 8 4 2 1 6 3 20 12 5 10 7 9 14 11 13 28 15 17 26 22 18 19 21 23 25 30 27 29 31 alle Knoten, deren Wert durch 4 aber nicht durch 8 teilbar ist, liegen auf der drittuntersten Ebene 20 10 voller binärer Suchbaum 16 24 8 4 2 1 6 5 3 20 12 10 7 9 14 11 13 28 15 17 26 22 18 19 21 23 25 30 27 31 29 alle Knoten, deren Wert durch 8 aber nicht durch 16 teilbar ist, liegen auf der viertuntersten Ebene 21 voller binärer Suchbaum Die gerade genannten Besonderheiten lassen sich auf alle vollen Suchbäume verallgemeinern. Auch wenn beliebige andere Werte in den Knoten gespeichert werden. Sie gelten sogar für beliebige volle Binärbäume. 22 11 Allgemein Allgemein gilt: Anhand der Inorder-Reihenfolgenummer eines Knotens ist seine Position im vollen Baum bestimmt. 23 Aufbau voller Binärbäume Liest man einen binären Suchbaum nach dem Inorder-Verfahren aus und schreibt die Werte nacheinander in eine Datei, dann stehen dort die Werte aufsteigend sortiert. z.B. die Werte von 1 bis 31. Die Datei wird ausgelesen und daraus ein neuer Baum mit minimaler Höhe generiert. Das geht wie folgt: 24 12 Schrittweiser Aufbau erster Wert eingefügt: bedeutet: Knoten, der für spätere Verbindung gemerkt werden muß 25 Schrittweiser Aufbau zweiter Wert eingefügt: 26 13 Schrittweiser Aufbau dritter Wert eingefügt: 27 Schrittweiser Aufbau vierter Wert eingefügt: 28 14 Schrittweiser Aufbau fünfter Wert eingefügt: 29 Schrittweiser Aufbau Nach dem Einfügen des fünften Werts in den neuen Baum, müssen sich zum ersten Mal zwei Pointer für spätere Verbindung gemerkt werden. 30 15 Schrittweiser Aufbau 21. Wert eingefügt: 31 lastnode-Vektor Der lastnode-Vektor wird verwendet, um für jede Ebene des Baums einen Pointer zwischen zu speichern. Dieser Pointer zeigt jeweils auf den letzten hinzugefügten Knoten der betreffenden Ebene. (Sofern nicht bereits ein anderer Knoten darauf zeigt.) 32 16 Schrittweiser Aufbau 33 Schrittweiser Aufbau Das beschriebene Verfahren funktioniert nicht nur bei vollen Bäumen. Falls z.B. nur die Werte 1-21 eingefügt werden müssen, kann aus dem bis dahin aufgebauten Gebilde ein Binärbaum leicht erzeugt werden. 34 17 Binärbaum Erzeugen eines Binärbaums aus diesem Gebilde Als Vater für Knoten 21 wird der erste markierte Knoten der nächsthöheren Ebene gesucht (20). Ebenso für Knoten 20, Vater wird 16. 16 wird Wurzel des gesamten Binärbaums 35 Vorteile Bei dem gezeigten Verfahren entstehen Binärbäume, die recht ausgeglichen sind. Im ungünstigsten Fall ist die Höhe um den Wert 1 schlechter als die eines vollständigen Baumes. 36 18