1 / 25

Vorlesung Informatik 2 Algorithmen und Datenstrukturen (20 - AVL-Bäume: Entfernen, Bruder-Bäume)

Vorlesung Informatik 2 Algorithmen und Datenstrukturen (20 - AVL-Bäume: Entfernen, Bruder-Bäume). Prof. Th. Ottmann. Definition von AVL-Bäumen.

december
Télécharger la présentation

Vorlesung Informatik 2 Algorithmen und Datenstrukturen (20 - AVL-Bäume: Entfernen, Bruder-Bäume)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Vorlesung Informatik 2Algorithmen und Datenstrukturen(20 - AVL-Bäume: Entfernen, Bruder-Bäume) Prof. Th. Ottmann

  2. Definition von AVL-Bäumen Definition: Ein binärer Suchbaum heißt AVL-Baum oder höhenbalanziert, wenn für jeden Knoten v gilt, dass sich die Höhe des rechten Teilbaumesh(Tr) von v und die Höhe des linken Teilbaumesh(Tl) von v um maximal 1 unterscheiden. Balancegrad:

  3. Beispiele AVL-Baum kein AVL-Baum AVL-Baum

  4. Entfernen aus einem AVL-Baum • Wie gehen ähnlich vor wie bei Suchbäumen:1. Suche nach dem zu entfernenden Schlüssel.2. Falls der Schlüssel nicht enthalten ist, sind wir fertig.3. Andernfalls unterscheiden wir drei Fälle: (a) Der zu löschende Knoten hat keine inneren Knoten als Nachfolger. (b) Der zu löschende Knoten hat genau einen inneren Knoten als Nachfolger. (c) Der zu löschende Knoten hat zwei innere Knoten als Nachfolger. • Nach dem Löschen eines Knotens kann ggf. die AVL-Baum-Eigenschaftverletzt sein (wie beim Einfügen). • Dies muss entsprechend behandelt werden.

  5. Der zu löschende Knoten hat nur Blätter als Nachfolger

  6. Zu löschender Knoten hat einen inneren Knoten als Nachfolger

  7. Zu löschender Knoten hat genau 2 innere Knoten als Nachfolger • Wir gehen zunächst so vor, wie bei Suchbäumen: 1. Wir ersetzen den Inhalt des zu löschenden Knotens p durch denseines symmetrischen Nachfolgers q. 2. Danach löschen wir den Knoten q. • Da q höchstens einen Nachfolger (den rechten) haben kann, treffenfür q die Fälle 1 und 2 zu.

  8. Die Methode upout • Die Methode upout funktioniert ähnlich wie die Methode upin. • Sie wird entlang des Suchpfads rekursiv aufgerufen und adjustiert dieBalancegrade durch Rotationen und Doppelrotationen. • Wenn upout für einen Knoten p aufgerufen wird, gilt (s.o.):1. bal(p) = 02. Die Höhe des Teilbaums mit Wurzel p ist um 1 gefallen. • upout wird nun so lange rekursiv aufgerufen, wie diese beidenBedingungen gelten (Invariante). • Wiederum unterscheiden wir 2 Fälle, abhängig davon, ob p linker oderrechter Nachfolger seines Vorgängers φp ist. • Da beide Fälle symmetrisch sind, behandeln wir im Folgenden nur denFall, dass p linker Nachfolger von φp ist.

  9. φp 0 0 φp -1 p Fall 1.1: p ist linker Nachfolger von φp und bal(φp) = -1 • Da die Höhe des Teilbaums mit Wurzel p um 1 gesunken ist, ändert sichdie Balance von φp zu 0. • Damit ist aber die Höhe des Teilbaums mit Wurzel φp um 1 gesunken undwir müssen upout(φp) aufrufen (die Invariante gilt jetzt für φp!). upout(φp)

  10. φp 0 p Fall 1.2: p ist linker Nachfolger von φp und bal(φp) = 0 • Da sich die Höhe des Teilbaums mit Wurzel p um 1 verringert hat, ändertsich die Balance von φp zu 1. • Anschließend sind wir fertig, weil sich die Höhe des Teilbaums mit Wurzelφp nicht geändert hat. φp 1 p 0 fertig!

  11. φp +1 0 q p Fall 1.3: p ist linker Nachfolger von φp und bal(φp) = +1 • Der rechte Teilbaum von φp war also vor der Löschung bereits um 1größer als der linke. • Somit ist jetzt in dem Teilbaum mit Wurzel φp die AVL-Baum-Eigenschaftverletzt. • Wir unterscheiden drei Fälle entsprechend dem Balancegrad von q.

  12. φp w v +1 -1 p u 0 q w 0 v +1 p u 0 3 h + 1 0 h – 1 1 h – 1 2 h + 1 3 h + 1 0 h - 1 1 h – 1 2 h + 1 Fall 1.3.1: bal(q) = 0 Rotation nach links fertig!

  13. φp w v +1 0 p u 0 q w 0 v 0 p u 0 0 h – 1 1 h – 1 2 h 3 h + 1 0 h - 1 1 h – 1 2 h Fall 1.3.2: bal(q) = +1 • Erneut hat sich die Höhe des Teilbaums um 1 verringert, wobei bal(r) = 0(Invariante). • Wir rufen also upout(r) auf. Rotation nach links 3 h + 1

  14. φp v +1 p u 0 q w -1 z 0 h – 1 1 h – 1 4 h 2 3 Fall 1.3.3: bal(q) = -1 r z 0 • Wegen bal(q) = -1 muss einer der Bäume 2 oder 3 die Höhe h besitzen. • Deswegen ist auch in diesem Fall die Höhe des gesamten Teilbaums um1 gefallen, wobei gleichzeitig bal(r) = 0 gilt (Invariante). • Wir rufen also wieder upout(r) auf. Doppel- rotation rechts-links v 0 w 0 p u 0 3 0 h - 1 1 h – 1 2 4 h

  15. Beobachtungen • Anders als beim Einfügen, kann es beim Löschen vorkommen, dass auchnach einer Doppelrotation die Methode upout rekursiv aufgerufenwerden muss. • Daher reicht i.Allg. eine einzelne Rotation oder Doppelrotation nichtaus, um den Baum wieder auszugleichen. • Man kann Beispiele konstruieren, in denen an allen Knoten entlangdes Suchpfads Rotationen oder Doppelrotationen ausgeführt werdenmüssen. • Wegen h 1.44 ... log2(n) + 1 gilt aber, dass das Entfernen einesSchlüssels aus einem AVL-Baum mit n Schlüsseln in höchstensO(log n) Schritten ausführbar ist. • AVL-Bäume sind eine worst-case-effiziente Datenstruktur für dasSuchen, Einfügen und Löschen von Schlüsseln.

  16. Bruder-Bäume Idee: • Innere Knoten dürfen auch nur einen Nachfolger haben. • Solche Knoten heißen unäre Knoten. • Durch Einfügen der unären Knoten erreicht man, dass alle Blätterdieselbe Tiefe haben. • Zu viele unäre Knoten führen jedoch zu entarteten Bäumen mit großer Höhe und wenigen Blättern. • Man verhindert das Entarten, indem man eine Bedingung an sogenannte Bruderknoten stellt. • Zwei Knoten heißenBrüder, wenn sie denselben Vorgänger haben.

  17. Definition von Bruder-Bäumen Definition: Ein binärer Baum heißt ein Bruder-Baum, wenn jeder innereKnoten einen oder zwei Nachfolger hat, jeder unäre Knoten einenbinären Bruder hat und alle Blätter dieselbe Tiefe haben. Bruder–Baum kein Bruder-Baum kein Bruder-Baum Bruder-Baum

  18. Beobachtungen • Ist ein Knoten p der einzige Nachfolger seines Vorgängers, so ist p einBlatt oder binär. Von zwei Nachfolgern eines binären Knotens kannhöchstens einer unär sein. • Offensichtlich ist die Anzahl der Blätter eines Bruder-Baumes stets um 1größer als die Anzahl der binären (inneren) Knoten. • Ebenso wie für AVL-Bäume gilt auch für Bruder-Bäume: EinBruder-Baum mit Höhe h hat wenigstens Fh+2 Blätter. • Entsprechend hat ein Bruder-Baum mit n Blättern und (n -1) innerenKnoten eine Höhe h 1.44 ... log2n.

  19. Bruder-Bäume als Suchbäume • Nur binäre Knoten enthalten Schlüssel. • Die Schlüssel im linken Teilbaum eines Knotens p sind alle kleiner als derSchlüssel in p. Umgekehrt sind alle Schlüssel im rechten Teilbaum von pgrößer als der von p. • Unäre Knoten enthalten keine Schlüssel. Eine Möglichkeit Bruder-Bäume als Suchbäume zu verwenden sind die sogenannten 1-2-Bruder-Bäume:

  20. Einschub: a-b-Bäume Definition: Ein a-b-Baum ist ein Baum mit folgenden Eigenschaften: 1. Jeder innere Knoten hat mindestens a und höchstens b Nachfolger. 2. Alle Blätter haben die gleiche Tiefe. 3. Jeder Knoten mit i Nachfolgern enthält genau i - 1 Schlüssel. Bemerkungen: 1. Bruder-Bäume sind spezielle 1-2-Bäume. 2. Die später behandelten B-Bäume sind -m-Bäume (m 2).

  21. Operationen auf Bruder-Bäumen (1) Suchen: Im Prinzip analog zu binären Suchbäumen. Stößt man auf einenunären Knoten, setzt man die Suche bei dessen Nachfolger fort. Einfügen: Beim Einfügen geht man anders vor als bei Suchbäumen: • Da alle Blätter die gleiche Höhe haben, kann man einen neuenKnoten nicht einfach anhängen. • Stattdessen versucht man, unäre in binäre Knoten umzuwandeln. • Gelingt dies nicht, geht man stufenweise nach oben und versucht dort,durch geeignete Transformationen den Knoten einzufügen. • Im schlimmsten Fall kommt man bis zur Wurzel und muss dann einenneuen Knoten zur Wurzel machen.

  22. Operationen auf Bruder-Bäumen (2) • Bruder-Bäume wachsen demnach an der Wurzel und nicht an denBlättern. Löschen:Beim Löschen geht man ähnlich vor wie bei binären Suchbäumen: • Gegebenenfalls muss man das Löschen auf das Löschen dessymmetrischen Nachfolgers reduzieren. • Ausgehend von dem zu löschenden Knoten geht man dann rekursiventlang des Suchpfads (ähnlich wie bei AVL-Bäumen) im Baum nachoben, um die Bruder-Baum-Eigenschaften wiederherzustellen. • Dabei muss man schlimmstenfalls bis zur Wurzel laufen. • Damit kann man auch bei Bruderbäumen die Operationen Suchen,Einfügen und Löschen in O(log n) durchführen.

  23. Analytische Betrachtungen • 1-2-Bruder-Bäume enthalten i.Allg. unäre Knoten, die keine Schlüsselspeichern. • Wie viele können das sein? • Für aufeinander folgende Levels sind lediglich folgende Konfigurationenmöglich: Niveau l: Niveau l + 1: (1) (2) (3)

  24. Wieviele Schlüssel sind in einem 1-2-Bruder-Baum? • Für jeden unären Knoten auf Niveau l muss es einen binären Bruderauf demselben Niveau geben. • Zulässige Kombinationen der Konfigurationen sind demnach: Konfiguration U (2) 2/3 (3) 3/3 (1) und eine Konfig. aus (2) 3/5 (1) und (3) 4/5 mit • Folglich sind wenigstens 3/5 aller Knoten in einem 1-2-Bruder-Baumbinär und enthalten Schlüssel.

  25. Konsequenzen • Offensichtlich werden beim Einfügen von n Schlüsseln in einen anfangsleeren Teilbaum höchstens 5/3 * n Knoten erzeugt. • Man kann nachweisen, dass bei der Einfügung eines neuen Knoten beimrekursiven Entlanglaufen des Suchpfads stets gestoppt wird, wenn keinneuer Knoten erzeugt wird. • Also ist die durchschnittliche Anzahl der notwendigenTransformationen bei einer Einfügung in einen 1-2-Bruder-Baumkonstant. • Für AVL-Bäume ist die Herleitung einer entsprechenden Aussagewesentlich schwieriger. • Zwar stoppt die Methode upin nach einer Rotation oder Doppelrotation,allerdings ist nicht klar, wie weit man nach oben laufen muss.

More Related