18. M¨arz, 2015 Datenstrukturen & Algorithmen Handout 4 Sebastian Millius, Sandro Feuz, Daniel Graf Thema: Bin¨ are Suchb¨ aume, AVL B¨ aume Links · Ein gutes Visualisierungs-Applet f¨ ur AVL-B¨aume: http://www.cs.jhu.edu/~goodrich/dsa/trees/avltree.html (http://goo.gl/n0Bb) · Slides von Michael Belfrage: http://www.belfrage.net/eth/d&a/pdf/uebung4_h.pdf (http://goo.gl/HqQwM) · MIT OpenCourseWare: AVL Implementation in Python: http://ocw.mit.edu/ans7870/6/6.006/s08/lecturenotes/search.htm (http://goo.gl/UR1hx) Bin¨ are Suchb¨ aume Ein Bin¨arer Suchbaum ist ein bin¨ arer Baum, der dem Suchbaumkriterium gen¨ ugt: F¨ ur jeden Knoten x gilt: Die Schl¨ ussel im linken Teilbaum von x sind allesamt kleiner als der Schl¨ ussel von x, und dieser ist wiederum kleiner als s¨amtliche Schl¨ ussel im rechten Teilbaum von x. x 6x >x Einf¨ uge-Beispiel: A A A S A A S E B B S R A S E B C B R C R H I A S E E B R C B R C H G I H S S E R C H A A C E S E R B A S A S E B E H G I N N Operationen · Suche: Die Suche kann iterativ formuliert werden Iterative-Tree-Search(x, k) 1 while x 6= Nil and k 6= key[x] 2 if k < key[x] 3 x = lef t[x] 4 else x = right[x] 5 return x 4-1 E I N · Minimum: Das Minimum (das ”linkeste” Element) in einem bin¨aren Suchbaum, kann gefunden werden, indem man von der Wurzel immer dem linken Kind folgt Tree-Minimum(x) 1 while lef t[x] 6=Nil 2 x = lef t[x] 3 return x · Maximum: analog Stop and Think: Operationen in Bin¨ aren Suchb¨ aumen Der Nachfolger eines Schl¨ ussels x in einem bin¨ aren Suchbaum ist der kleinste Schl¨ ussel der gr¨osser als x ist. Wie kann der Nachfolger effizient gefunden werden? Die Komplexit¨ at der Operationen Einf¨ ugen, Suchen ... ist O(h), wobei h die H¨ohe des Baumes ist. Bei einem bin¨ aren Suchbaum ist h zwischen log n und n, d.h. im Worst Case verh¨alt sich ein bin¨arer Suchbaum nicht besser als eine Linked List. vs. perfekt balanciert Pfad Balancierte Suchb¨ aume garantieren eine Baumh¨ohe h = O(log n) ❀ Operationen in O(log n) Durchlaufordnungen Eine Durchlaufordnung ist eine Art, wie ein Baum traversiert (durchlaufen) werden kann. Folgend die vier am h¨ aufigsten verwendeten Traversierungsm¨oglichkeiten, die - beginnend von der Wurzel - rekursiv ausgef¨ uhrt werden k¨ onnen: · Preorder: Wurzel, Linker Teilbaum, Rechter Teilbaum Dies entspricht der sogenannten Tiefensuche (Depth-First-Traversal) Think about it : Einen bin¨ aren Suchbaum mit einer gegebenen Preorder Seqeunz erh¨alt man, in dem die Elemente der Sequenz in einen anfangs leeren bin¨aren Suchbaum einf¨ ugt. · Postorder: Linker Teilbaum, Rechter Teilbaum, Wurzel Think about it : Einen bin¨ aren Suchbaum mit einer gegebenen Postorder Seqeunz erh¨alt man, in dem die Elemente der Sequenz r¨ uckw¨arts (d.h. von hinten beginnend) in einen anfangs leeren bin¨ aren Suchbaum einf¨ gt. · Inorder: Linker Teilbaum, Wurzel, Rechter Teilbaum Die Knoten werden auf den Boden projeziert. Dies ergibt f¨ ur bin¨are Suchb¨aume gerade die sortierte Liste · Levelorder: Bei dieser Traversierung gibt man jeden Knoten eines Levels aus (von links nach rechts), bevor man zum n¨ achst tieferen Level geht. Dieses Vorgehen ist weitgehend als Breitensuche (Breadth-First-Search) bekannt. 4-2 AVL B¨ aume AVL B¨aume sind balancierte bin¨ are Suchb¨aume. Sie sind benannt nach G.M. Adel’son-Vel’skii und E.M. Landis. AVL Baum-Strukturbedingung: die H¨ohen des linken und des rechten Teilbaums jedes Knotens unterscheiden sich h¨ ochstens um ±1. h h h-1 h h h-1 Durch den Erhalt dieser Strukturbedingung wird erreicht, dass die H¨ohe des Baumes jeweils O(log(n)) ist und beispielsweise nicht zu einer Liste degenerieren kann. Die Ausbalanciertheit erreicht man mittels Rotationen. Diese Rotationen sind im Buch Algorithmen und Datenstrukturen, S. 271ff genau beschrieben. Auch hier empfiehlt sich einmal mehr, sich mittels Visualisierungstool mit dem AVL-Baum vertraut zu machen! Die Suche in einem AVL Baum erfolgt wie in einem nat¨ urlichen bin¨aren Suchbaum. Beim Einf¨ ugen und Entfernen von Knoten m¨ ussen evtl. Rotationen angewendet werden um die Ausbalanciertheit zu garantieren. · Einf¨ ugen: Einf¨ ugen wie in bin¨ arem Suchbaum, danach solange von unten nach oben rotieren (mittels Einfach- und Doppelrotationen), bis der Baum wieder balanciert ist (h¨ochstens eine Rotation (einfach oder doppel) ist notwendig). Es sei x der Knoten, bei dem die AVL Bedingung verletzt ist. x ist nicht der Knoten, den wir eingef¨ ugt haben. Es k¨ onnen folgende F¨alle auftreten: der neue Knoten wurde eingef¨ ugt im 1. linken Teilbaum des linken Kindes von x 2. rechten Teilbaum des linken Kindes von x 3. linken Teilbaum des rechten Kindes von x 4. rechten Teilbaum des rechten Kindes von x Die F¨ alle 1 & 4 werden gel¨ ost mit einer Einfachrotation. Die F¨alle 2 & 3 mit einer Doppelrotation. · L¨ oschen eines Knotens – Suche nach dem Knoten – Falls gefunden ❀ Ersetzen mit symmetrischem Nachfolger/Vorg¨ager (Blatt!) – Bei dem Blatt beginnend nach oben: Rebalancierung Es k¨ onnen mehrere Rotationen notwendig sein, damit diese Operation abgeschlossen und die Strukturbedingung wieder erf¨ ullt ist. Stop and Think: Are you AVL? Gebe einen Algorithmus an, der f¨ ur einen bin¨aren Baum entscheidet ob dieser ein AVL Baum ist. 4-3 Rotationen Um die AVL-Aufgaben von Hand zu l¨osen, verf¨ahrt man am besten, wie Michael Belfrage dies ¨ auf seinen Ubungsslides von 2008 darstellt. http://www.belfrage.net/eth/d&a/pdf/uebung4_h.pdf (http://goo.gl/HqQwM) x y h-1 y A h-1 B Links-Rotation(x) h+1 h x h C h h-1 B h-1 A y x y h-1 A h C C B x y h-1 Links-Rotation(x) h+1 h+1 h+1 x h h B h-1 A h Doppelrotation: Rechts-Rotate(y) Links-Rotate(x) z h C h+1 y x h A h h-1 z D h-1 h-1 A B h-1 B oder h-2 C 1. die unbalancierten Knoten rot f¨arben (hier x) 2. dessen schwereres Kind gr¨ un f¨ arben (hier y) 3. Fallunterscheidung · gr¨ un’s Kinder sind gleich schwer ❀ Einfachrotation · sonst gr¨ un’s schwereres Kind blau f¨arben (hier z) falls rot < gr¨ un < blau ❀ Einfachrotation sonst ❀ Doppelrotation 4-4 oder h-2 C D h-1 Beispiel: x = 29: links-links Fall: Einfachrotation 41 Insert(23) 41 20 11 29 65 20 65 50 11 29 50 26 26 23 Ok Insert(55) 41 41 20 11 20 65 50 26 11 11 23 41 20 65 50 26 29 29 Ok x=65: links-rechts Fall: Doppelrotation 41 20 50 26 23 29 23 65 11 55 55 50 26 23 65 29 Stop and Think: Balancierte Suchb¨ aume Problem: Lesen von n Zahlen und Anzeigen in sortierter Reihenfolge. Zur Verf¨ ugung steht ein balancierter Suchbaum der die Operationen search, insert, delete, minimum, maximum, successor, predecessor in O(log n) ergm¨oglicht. 1. Wie kann man in O(n log n) sortieren mit nur insert und in-order Traversierung? 2. Wie kann man in O(n log n) sortieren mit nur minimum, successor, insert ? 3. Wie kann man in O(n log n) sortieren mit nur minimum, insert, delete? Aufgabe F¨ ugen Sie in einen anfangs leeren AVL-Baum folgende Schl¨ ussel der Reihe nach ein: 8, 4, 5, 12, 16, 19, 18, 3, 1, 0 Zeichnen Sie dabei den Baum nach jeder Einf¨ ugeoperation sowie nach jeder Rotation und Doppelrotation. L¨ oschen Sie danach im entstandenen Baum die Schl¨ ussel 18, 3, 4, 5, 8 der Reihe nach. Benutzen Sie falls ben¨ otigt den symmetrischen Nachfolger. Zeichnen Sie den Baum nach jeder L¨oschoperation und nach jeder Rotation. 4-5
© Copyright 2024