www.wikidata.de-de.nina.az
Der AVL Baum ist nach den sowjetischen Mathematikern Georgi Maximowitsch Adelson Velski und Jewgeni Michailowitsch Landis benannt die die Datenstruktur im Jahr 1962 vorstellten 1 Damit ist der AVL Baum die alteste Datenstruktur fur balancierte Baume Abb 1 AVL Baum mit Balance Faktoren grun AVL BaumKomplexitatPlatz O n displaystyle mathcal O n Operation im Mittel Worst CaseSuchen O log n displaystyle mathcal O log n O log n displaystyle mathcal O log n Querschritt O 1 displaystyle mathcal O 1 O log n displaystyle mathcal O log n Min Max O log n displaystyle mathcal O log n O log n displaystyle mathcal O log n Einfugen O 1 displaystyle mathcal O 1 O log n displaystyle mathcal O log n Loschen O 1 displaystyle mathcal O 1 O log n displaystyle mathcal O log n Verketten O log n displaystyle mathcal O log n O log n displaystyle mathcal O log n Spalten O log n displaystyle mathcal O log n O log n displaystyle mathcal O log n n displaystyle n Knoten im Baum ohne NavigationPlatz und Zeit KomplexitatenEr bildet eine Datenstruktur in der Informatik in Form eines binaren Suchbaums mit der zusatzlichen Eigenschaft dass sich an jedem Knoten die Hohe der beiden Teilbaume um hochstens eins unterscheidet 2 Diese Eigenschaft lasst seine Hohe nur logarithmisch mit der Zahl der Schlussel wachsen und macht ihn zu einem balancierten binaren Suchbaum Die maximale und mittlere Anzahl der Schritte Vergleiche die notig sind um An oder Abwesenheit eines Schlussels festzustellen hangt direkt mit der Hohe zusammen Ferner ist der maximale Aufwand fur Operationen zum Einfugen und Entfernen eines Schlussels proportional zur Hohe des Baums und damit ebenfalls logarithmisch in der Zahl der Schlussel der mittlere Aufwand ist sogar konstant wenn das Positionieren auf das Zielelement nicht mitgerechnet wird Viele Operationen insbesondere die Navigationsoperationen sind direkt von den binaren Suchbaumen zu ubernehmen Bei den modifizierenden Operationen muss jedoch das AVL Kriterium beobachtet werden womit auf jeden Fall kleine Anpassungen durchzufuhren sind die bis zu Hohenkorrekturen durch sogenannte Rotationen reichen konnen Inhaltsverzeichnis 1 Motivation 2 Das AVL Kriterium 2 1 Eigenschaften 2 2 Datenstruktur 3 Operationen 3 1 Navigieren 3 2 Einfugen Eintragen 3 3 Loschen Austragen Entfernen 4 Rebalancierung 4 1 Einfachrotation 4 2 Doppelrotation 4 3 Beispiel 5 Operationen mit ganzen AVL Baumen 5 1 Verketten 5 2 Spalten 5 3 Anwendungsbeispiele 6 Implementierung 6 1 Cursor 6 2 Trennung der navigierenden von den modifizierenden Operationen 6 3 Parallelisierung 7 Vergleich mit Rot Schwarz Baum 8 Anwendungen 9 Weitere Baumstrukturen 10 Literatur 11 Weblinks 12 Einzelnachweise 13 AnmerkungenMotivation BearbeitenSuchbaume und damit auch die AVL Baume sind Losungen des sogenannten Worterbuchproblems Eine prinzipielle Erlauterung findet sich im Abschnitt Motivation im Artikel Binarer Suchbaum Den Suchbaumen gemeinsam ist dass sie Dynamik unterstutzen das heisst dass Einfugen und oder Loschen von Elementen wichtig ist Da bei diesen Operationen die Gefahr besteht dass die Balance des Baums verloren geht wurden verschiedene Balance Kriterien fur Binarbaume entwickelt Bei den meisten sind die Aufwande fur das Suchen Einfugen und Loschen zumindest im Mittel logarithmisch wenn auch mit unterschiedlichen konstanten Faktoren Beim AVL Baum wird die Balance uber die Hohe definiert er ist ein hohen balancierter binarer Suchbaum Das AVL Kriterium BearbeitenAls den Balance Faktor 3 B F t displaystyle mathrm BF t nbsp eines Knotens resp Teilbaums Anm 1 t displaystyle t nbsp in einem Binarbaum bezeichnet man die Hohendifferenz B F t H e i g h t t r H e i g h t t l displaystyle mathrm BF t mathrm Height t r mathrm Height t l nbsp Anm 2 wobei H e i g h t t displaystyle mathrm Height t nbsp die Hohe des Baums t displaystyle t nbsp und t l displaystyle t l nbsp der linke t r displaystyle t r nbsp der rechte Kindbaum von t displaystyle t nbsp ist Anm 3 Ein Knoten t displaystyle t nbsp mit B F t 0 displaystyle mathrm BF t 0 nbsp wird als hohengleich oder ausgewogen einer mit B F t lt 0 displaystyle mathrm BF t lt 0 nbsp als links und einer mit B F t gt 0 displaystyle mathrm BF t gt 0 nbsp als rechtslastig bezeichnet Ein binarer Such Baum ist genau dann ein AVL Baum wenn die AVL Bedingung 1 B F t 1 displaystyle 1 leq mathrm BF t leq 1 nbsp an jedem Knoten t displaystyle t nbsp eingehalten wird Anm 4 Eigenschaften Bearbeiten Diese Definition beschrankt die Hohe H e i g h t t displaystyle mathrm Height t nbsp Anm 5 eines AVL Baums t displaystyle t nbsp mit n displaystyle n nbsp Knoten Schlusseln durch die Ungleichung 4 log 2 n 1 H e i g h t t lt c log 2 n 2 b displaystyle log 2 n 1 leq mathrm Height t lt c log 2 n 2 b nbsp mit c 1 log 2 F 1 440 420 displaystyle c frac 1 log 2 Phi approx 1 440420 nbsp b c 2 log 2 5 2 0 327 724 displaystyle b frac c 2 log 2 5 2 approx 0 327724 nbsp und F 1 5 2 1 618 034 displaystyle Phi frac 1 sqrt 5 2 approx 1 618034 nbsp Zahl des goldenen Schnitts Die untere Schranke kommt vom vollstandigen Binarbaum bei dem bis auf die unterste Ebene alle Ebenen komplett sind die obere vom Fibonacci Baum der bei gegebener Hohe einen AVL Baum mit kleinster Knotenanzahl darstellt also bei gleicher Knotenzahl die grosste Hohe hat somit in Bezug auf die Hohe am schlechtesten balanciert ist Dabei ist die Hohe gemittelt uber alle zufalligen Einfugungen in einen AVL Baum vorgegebener Grosse naher bei der unteren als bei der oberen Grenze des Intervalls 5 Datenstruktur Bearbeiten Werden der Datenstruktur AVL Baum Operationen zum Zugriff und zur Verwaltung beigegeben so werden diese nur dann als zugehorig angesehen wenn sie die AVL Eigenschaft aufrechterhalten So erweitert wird die Datenstruktur zu einem Abstrakten Datentyp ADT Bei Suchbaumen gibt es im Englischen dafur auch die Charakterisierung als self balancing tree Operationen BearbeitenDie wichtigsten Operationen bei den Suchbaumen und damit beim AVL Baum sind Suchen einerseits sowie Einfugen und Loschen andererseits Mit der Eigenschaft dass alle diese Operationen im schlechtesten Fall Worst Case logarithmische Komplexitat haben gehort der AVL Baum zu den hohenbalancierten binaren Suchbaumen Navigieren Bearbeiten Die Navigationsoperationen das sind die verschiedenen Suchoperationen das Traversieren und Iterieren Aufsuchen erstes oder letztes Element und ahnliche lassen den Baum unverandert und funktionieren im Prinzip auf jedem binaren Suchbaum Die dortigen Angaben zur Komplexitat gelten genauso fur AVL Baume mit der Prazisierung dass die Hohe des AVL Baums sich logarithmisch zur Anzahl der Knoten verhalt Das Suchen englisch find search lookup oder locate eines Elements anhand seines Schlussels ist die wichtigste unter den Navigationsoperationen Die Hohen Balancierung des AVL Baums versucht auf diese Operation hin zu optimieren Sie ermoglicht einen sogenannten direkten Zugriff im Gegensatz zum sequentiellen Zugriff der Traversierung Sie wird in der Regel als vorausgehende Operation sowohl beim Einfugen als auch beim Loschen eingesetzt Das Suchen setzt eine totale Quasiordnung auf der Menge der Schlussel voraus die am flexibelsten durch eine Vergleichsfunktion bereitgestellt wird Das mittlere Laufzeitverhalten des Suchens in einem binaren Suchbaum wird durch die Pfadlangensumme wiedergegeben welche geteilt durch die Knotenzahl die mittlere Suchtiefe definiert Diese verhalt sich beim AVL Baum proportional zur optimalen Suchtiefe mit einem Proportionalitatsfaktor nur wenig grosser als 1 Anm 6 Einfugen Eintragen Bearbeiten Es sei angenommen dass die Navigation zum Einfugepunkt bereits erfolgt ist Ein Einfugepunkt ist ein externes Blatt 6 und liegt ganz links oder ganz rechts oder zwischen 2 internen und Schlussel tragenden Knoten kann also auf jeden Fall durch einen internen Knoten zusammen mit einer Richtung links oder rechts spezifiziert werden Die Knoten ganz links oder ganz rechts sind immer Halb Blatter wie auch von 2 Nachbarknoten wenigstens einer ein Halb Blatt ist Ein solcher Knoten sei zusammen mit der entsprechenden Richtung als der unmittelbare Einfugepunkt bezeichnet So wird er auch von einer nicht erfolgreichen Suchoperation geliefert Zur Einfugung englisch insert oder add wird der Knoten mit dem neuen Schlussel als Blatt am Einfugepunkt eingehangt mit anderen Worten das externe Blatt wird zum internen Blatt Die Hohe des aus diesem Blatt bestehenden Teilbaums erhoht sich von 0 auf 1 Fur die Reparatur des Baumes oberhalb des Einfugepunktes gibt es 2 verschiedene Vorgehensweisen Man geht den Pfad der Elterknoten zuruck bis u U zur Wurzel retracing in der englischen Literatur Hier muss ein Stapelspeicher bei rekursiver Programmierung meist der Programm Stapelspeicher vorher mit den Knoten im Pfad gefullt worden sein Man hat sich beim Suchen im Abstieg einen dann den letzten tiefsten nicht ausgewogenen also links oder rechtslastigen Knoten gemerkt Top Down Strategie 7 Die finale Reparatur ist dann ein zweiter Abstieg ab diesem Elterknoten Man kann fur dieses Teilstuck die Vergleiche wiederholen oder man hat sich die Vergleichsergebnisse vorher in einem Stapelspeicher mit einem Bit pro Eintrag gemerkt 8 Wir zeigen hier die einfachere Variante die der Abfolge bei rekursiver Programmierung entspricht Beim Aufstieg zum Elterknoten und spater bei jedem weiteren Aufstieg gibt es entsprechend der 3 Werte des ursprunglichen Balance Faktors dieses Knotens 3 Moglichkeiten fur den neuen temporaren Balance Faktor Wird der Balance Faktor zu 0 dann kommt man von einem Kindbaum der vorher niedriger war und die Hohe des Knotens andert sich nicht mit der Folge dass oberhalb alle Balance Faktoren bleiben konnen wie sie sind und das AVL Kriterium fur den ganzen Baum erfullt ist Wird der Balance Faktor zu 1 er muss vorher 0 gewesen sein erhoht sich die Hohe des Teilbaums um 1 und die Uberprufung der Balance Faktoren oberhalb muss weitergehen Wird auf einer Ebene der Balance Faktor zu 2 muss der Teilbaum rebalanciert werden siehe Rebalancierung weiter unten Danach hat bei einer Einfugeoperation der Teilbaum die gleiche Hohe wie vorher mit der Folge dass oberhalb alle Balance Faktoren bleiben konnen wie sie sind und das AVL Kriterium fur den ganzen Baum auch schon erfullt ist Das Einfugen des n 1 displaystyle n 1 nbsp ten Knotens in einen AVL Baum mit n displaystyle n nbsp Knoten hat im schlechtesten Fall mit oder ohne Suchen logarithmischen Aufwand beispielsweise wenn jede Ebene bis hinauf zur Wurzel uberpruft werden muss Da aber hierfur die Wahrscheinlichkeit von Ebene zu Ebene nach oben hin exponentiell abnimmt ist der reine Modifikationsaufwand Andern von Balance Faktoren und Rotationen beim Einfugen im Mittel konstant Anm 7 Es kann sogar gezeigt werden dass der Modifikationsaufwand in einem reinen Einfugeszenario amortisiert konstant ist 9 Code Schnipsel Bei der Einfugung des neuen Knotens Z als Kind von X wachst die Hohe dieses Teilbaums Z von 0 auf 1 Schleifeninvariante bei der EinfugungDie Hohe des Teilbaums Z erhoht sich um 1 Er ist in AVL Form Schleife vom Blatt bis moglicherweise zur Wurzel for X Z gt parent X null X Z gt parent if Z X gt childR Der rechte Teilbaum ist es der hoher wird if X gt BF lt 0 X ist nicht rechtslastig if X gt BF lt 0 X ist linkslastig X gt BF 0 Z s Hohenzunahme aufgefangen bei X break Verlassen der Schleife X gt BF 1 Z X Height Z wird hoher um 1 continue else X ist rechtslastig gt X gt BF temporar 2 gt Rebalancierung erforderlich G X gt parent Retten X gt parent vor Rotation if Z gt BF lt 0 Rechts Links Situation s Abbildung 3 N rotate RightLeft X Z Doppelrotation Right Z dann Left X else Rechts Rechts Situation s Abbildung 2 N rotate Left X Z Einfachrotation Left X else Z X gt childL der linke Teilbaum wird hoher if X gt BF gt 0 X ist nicht linkslastig if X gt BF gt 0 X ist rechtslastig X gt BF 0 Z s Hohenzunahme aufgefangen bei X break Verlassen der Schleife X gt BF 1 Z X Height Z wird hoher um 1 continue else X ist linkslastig gt X gt BF temporar 2 gt Rebalancierung erforderlich G X gt parent Retten X gt parent vor Rotation if Z gt BF gt 0 Links Rechts Situation N rotate LeftRight X Z Doppelrotation Left Z dann Right X else Links Links Situation N rotate Right X Z Einfachrotation Right X Nach der Rotation die Anpassung der Verknupfung N lt gt G N ist die neue Wurzel des rebalancierten Teilbaums Hohe andert sich nicht Height N alte Height X N gt parent G if G null if X G gt childL G gt childL N else G gt childR N else tree gt root N N ist die neue Wurzel des ganzen Baums break Da ist kein fall thru nur break oder continue Wird die Schleife nicht durch ein break beendet dann wird der ganze Baum um 1 hoher Loschen Austragen Entfernen Bearbeiten Die Navigation zum zu loschenden Knoten kann mittels einer Suche aber auch durch einen Querschritt erfolgen Beim Loschen englisch delete oder remove sind mehr Falle zu unterscheiden als beim Einfugen s Binarer Suchbaum Einfach sind die Falle wo der zu loschende Knoten ein Halb Blatt ist Hat er aber zwei Kinder mussen die beiden frei werdenden Teilbaume neu aufgehangt werden Dazu wahlt man einen der In order Nachbarn also entweder den rechtesten Knoten des linken Kindbaums oder den linkesten des rechten Kindbaums als Ersatzelter 10 um die beiden Teilbaume daran wieder aufzuhangen Der hierfur erforderliche Abstieg geht maximal uber so viele Stufen wie die Hohe betragt und im Mittel uber genau eine Der Ersatzknoten wird in der Hierarchie des Baums an der Stelle des geloschten Knotens eingeklinkt muss dabei aber selbst aus seinem Herkunftsteilbaum entfernt werden das ist einfach da er ein Halb Blatt ist Wenn ein Blatt das ist ein Teilbaum bestehend aus 1 Knoten entfernt wird vermindert sich dessen Hohe von 1 auf 0 und wenn ein Blatt an die Stelle eines Halb Blatts nachruckt vermindert sich dessen Hohe von 2 auf 1 Alle Hohenanderungen mussen wenigstens in den AVL Balance Faktoren reflektiert werden Anm 8 Beim Aufstieg zum Elterknoten und spater bei jedem weiteren Aufstieg gibt es entsprechend der 3 Werte des ursprunglichen Balance Faktors dieses Knotens 3 Moglichkeiten fur den neuen temporaren Balance Faktor Wird der Balance Faktor zu 1 er war vorher 0 dann andert sich die Hohe nicht mit der Folge dass die Balance Faktoren oberhalb bleiben konnen wie sie sind und das AVL Kriterium fur den ganzen Baum erfullt ist Wird der Balance Faktor zu 0 verringert sich die Hohe des Teilbaums um 1 und die Uberprufung der Balance Faktoren oberhalb muss weitergehen Wird der Balance Faktor zu 2 muss der Teilbaum rebalanciert werden siehe Rebalancierung weiter unten Danach kann bei der Loschoperation der neue Teilbaum eine um 1 niedrigere Hohe als vorher haben mit der Folge dass weiterhin uberpruft und gegebenenfalls rebalanciert werden muss Es kommt aber auch vor dass sich die gleiche Hohe wie vor dem Loschen ergibt sodass die Balance Faktoren oberhalb bleiben konnen wie sie sind und das AVL Kriterium fur den ganzen Baum auch schon erfullt ist Der Aufwand furs Loschen ist im schlechtesten Fall logarithmisch mit oder ohne Suchen im Mittel aber bspw wenn das Auffinden des Loschkandidaten nicht mitgerechnet werden muss weil es anderweitig bewerkstelligt werden kann ist er konstant da die Wahrscheinlichkeit fur die Notwendigkeit die Balance auf der nachsthoheren Ebene uberprufen zu mussen nach oben hin exponentiell abnimmt Anm 9 Code Schnipsel Bei der Loschung eines Knotens N als Kind von X geht der entsprechende Teilbaum von X von Hohe 1 auf 0 oder von Hohe 2 auf 1 wenn N noch ein inneres Kind hatte Schleifeninvariante bei der LoschungDie Hohe des Teilbaums N verringert sich um 1 Er ist in AVL Form Schleife vom Blatt bis moglicherweise zur Wurzel for X N gt parent X null X G G X gt parent Retten X gt parent vor Rotation if N X gt childL Der linke Teilbaum ist es der niedriger wird if X gt BF lt 0 X ist nicht rechtslastig if X gt BF lt 0 X ist linkslastig X gt BF 0 N X Height N wird niedriger um 1 continue X gt BF 0 X gt BF 1 N s Hohenabnahme aufgefangen bei X break Verlassen der Schleife else X ist rechtslastig gt X gt BF temporar 2 gt Rebalancierung erforderlich Z X gt childR das Geschwister von N hoher um 2 b Z gt BF if b lt 0 Rechts Links Situation s Abbildung 3 N rotate RightLeft X Z Doppelrotation Right Z dann Left X else Rechts Rechts Situation s Abbildung 2 N rotate Left X Z Einfachrotation Left X else N X gt childR Der rechte Teilbaum wird niedriger if X gt BF gt 0 X ist nicht linkslastig if X gt BF gt 0 X ist rechtslastig X gt BF 0 N X Height N wird niedriger um 1 continue X gt BF 0 X gt BF 1 N s Hohenabnahme aufgefangen bei X break Verlassen der Schleife else X ist linkslastig gt X gt BF temporar 2 gt Rebalancierung erforderlich Z X gt childL das Geschwister von N hoher um 2 b Z gt BF if b gt 0 Links Rechts Situation N rotate LeftRight X Z Doppelrotation Left Z dann Right X else Links Links Situation N rotate Right X Z Einfachrotation Right X Nach der Rotation die Anpassung der Verknupfung N lt gt G N ist die neue Wurzel des rebalancierten Teilbaums N gt parent G if G null if X G gt childL G gt childL N else G gt childR N else tree gt root N N ist die neue Wurzel des ganzen Baums if b 0 der in Abbildung 2 blass gehaltene Fall break Die Hohe andert sich nicht Verlassen der Schleife Height N wird niedriger um 1 alte Height X 1 Wird die Schleife durch N gt parent null beendet dann verringert sich die Hohe des ganzen Baums um 1 Rebalancierung Bearbeiten nbsp Abb 2 EinfachrotationLinks X Wenn bei einer Operation ein Hohenunterschied von mehr als 1 zwischen zwei Geschwister Teilbaumen entsteht ist beim Elterknoten das AVL Kriterium verletzt Eine entsprechende Korrektur heisst Rebalancierung Als Werkzeuge hierfur eignen sich die sogenannten Rotationen Fur Einfugungen und Loschungen bei denen die temporare Hohendifferenz absolut nie uber 2 hinausgeht werden zwei Varianten benotigt Einfach und Doppelrotation Eine Einfachrotation leistet die Rebalancierung wenn das innere Kind des um 2 hoheren Geschwisters Z in den zwei Abbildungen 2 und 3 11 das ist das Kind mit einer Kindesrichtung die der von Z entgegengesetzt ist t23 in der Abbildung 2 beziehungsweise Y in der Abbildung 3 nicht hoher ist als sein Geschwister das aussere Kind t4 in beiden Abbildungen Dieser Fall wird in der Literatur als Rechts Rechts resp gespiegelt Links Links Situation bezeichnet da X rechts und Z nicht linkslastig ist das heisst die zwei Balance Faktoren 2 und 1 beim Loschen auch 0 sind kurz die Balance zweimal hintereinander die gleiche Richtung hat Der andere Fall bei dem das innere Kind hoher ist wird von einer Doppelrotation abgedeckt in der Literatur Rechts Links resp Links Rechts Situation genannt da X rechts und Z linkslastig ist das heisst die zwei Balance Faktoren 2 und 1 sind kurz die Balance die Richtung wechselt Die Schlussel bewegen sich bei Rotationen nur vertikal innerhalb der senkrechten Raster Die In order Reihenfolge der Knoten die ja die Sortierreihenfolge horizontal abbildet bleibt also vollkommen erhalten Eine Rotation umfasst nur eine konstante Anzahl von Verknupfungsanderungen an einer konstanten Anzahl von Knoten Einfachrotation Bearbeiten Sie wird im Original Maloe vrashenie kleine Drehung genannt Die obenstehende Abbildung 2 zeigt eine Rechts Rechts Situation In der oberen Halfte haben die beiden Teilbaume Z und t1 des Knotens X einen Hohenunterschied von 2 Das innere Kind t23 des um 2 hoheren Knotens Z ist nicht hoher als sein Geschwister t4 Dies kann nach einem Einfugen in den Teilbaum t4 oder nach einem Loschen aus dem Teilbaum t1 auftreten Der in der Abbildung 2 blass gehaltene Fall dass t23 gleich hoch ist wie t4 kommt nur beim Loschen vor Die Rebalancierung gezeigt in der unteren Halfte der Abbildung gelingt durch eine Einfachrotation nach links Die anzupassenden 3 Verknupfungen sind in der Abbildung verstarkt gezeichnet und bei beiden Knoten X und Z andern sich die Balance Faktoren Die Hohe des neuen Teilbaums Z ist bei einer Einfugung gleich der von X vor der Operation Dies ist bei einer Loschung genauso wenn Z nicht rechtslastig war Bei rechtslastigem Z vermindert sich jedoch die Hohe um 1 und die Uberprufung der Balance Faktoren oberhalb muss weitergehen Die gespiegelte die Links Links Situation wird von einer Einfachrotation nach rechts behandelt Code Beispiel rotate Left Eingabe X Wurzel des Teilbaums der nach links rotiert werden sollZ sein rechtes Kind nicht linkslastig mit Hohe H e i g h t Z H e i g h t X childL 2 displaystyle mathrm Height Z mathrm Height X to text childL 2 nbsp Ruckgabewert die neue Wurzel des rebalancierten Teilbaumsnode rotate Left node X node Z Z is um 2 hoher als sein Geschwister t23 Z gt childL das innere Kind von Z X gt childR t23 if t23 null t23 gt parent X Z gt childL X X gt parent Z Kommt bei einer Einfugung nicht vor if Z gt BF 0 t23 war gleich hoch wie t4 X gt BF 1 t23 jetzt hoher Z gt BF 1 t4 jetzt niedriger als X else Ende Nicht bei Einfugung X gt BF 0 Z gt BF 0 return Z return neue Wurzel des rebalancierten Teilbaums Doppelrotation Bearbeiten nbsp Abb 3 DoppelrotationRechtsLinks X Z Rechts Z Links X Sie wird im Original Bolshoe vrashenie grosse Drehung genannt Die in der Abbildung 3 gezeigte Situation unterscheidet sich von der in Abbildung 2 darin dass der mittlere Kindbaum mit Wurzel Y das ist das innere Kind des um 2 hoheren Knotens Z hoher ist als sein Geschwister t4 eine Rechts Links Situation da X rechts und Z linkslastig ist Das kann nach der Einfugung des Knotens Y oder einer Einfugung in einen der Teilbaume t2 oder t3 oder nach einer Loschung aus dem Teilbaum t1 passieren Der Fall bei dem die Teilbaume t2 und t3 gleich hoch sind und der Teilbaum Y hoher als t4 kommt nur bei der Loschung vor Die Doppelrotation deren Ergebnis im unteren Drittel der Abb gezeigt ist ist eine Rechtsrotation durch Z gegen die Linkslastigkeit von Z mittleres Drittel gefolgt von einer Linksrotation durch X gegen die Rechtslastigkeit von X Sie bewirkt eine zweimalige Anhebung des hoheren und inneren Kindes Y von Z Die anzupassenden 5 Verknupfungen sind in der Abbildung verstarkt gezeichnet und bei allen 3 Knoten X Y und Z andern sich die Balance Faktoren Anm 10 Die Hohe des neuen Teilbaums Y ist nach einer Einfugung gleich der von X vor der Operation Bei einer Loschung ist die Hohe jedoch um 1 vermindert mit der Folge dass oberhalb die Uberprufung der Balance Faktoren weitergehen muss Bei einer Links Rechts Situation wird die gespiegelte Version das heisst eine Linksrotation gefolgt von einer Rechtsrotation benotigt Code Beispiel rotate RightLeft Eingabe X Wurzel des Teilbaums der rotiert werden sollZ sein rechtes Kind linkslastig mit Hohe H e i g h t Z H e i g h t X childL 2 displaystyle mathrm Height Z mathrm Height X to text childL 2 nbsp Ruckgabewert die neue Wurzel des rebalancierten Teilbaumsnode rotate RightLeft node X node Z Z is um 2 hoher als das Geschwister Y Z gt childL das innere Kind von Z Y is um 1 hoher als das Geschwister t3 Y gt childR Z gt childL t3 if t3 null t3 gt parent Z Y gt childR Z Z gt parent Y t2 Y gt childL X gt childR t2 if t2 null t2 gt parent X Y gt childL X X gt parent Y if Y gt BF 0 t2 und t3 gleich hoch beide null im Fall der Einfugung von Y X gt BF 0 Z gt BF 0 else Ende Nicht bei Einfugung if Y gt BF gt 0 t3 war hoher X gt BF 1 t1 jetzt hoher Z gt BF 0 else t2 war hoher X gt BF 0 Z gt BF 1 t4 jetzt hoher Y gt BF 0 return Y return neue Wurzel des rebalancierten Teilbaums Beispiel Bearbeiten Der AVL Baum in der Abbildung 1 wird nach der Loschung des Knotens G durch die zwei Einfachrotationen Rechts F spater Links J nach der Einfugung eines Knotens T durch die Doppelrotation LinksRechts V S rebalanciert Operationen mit ganzen AVL Baumen BearbeitenDie folgenden zwei Operationen haben ganze AVL Baume als Ein und Ausgabeoperanden Sie gehoren nicht zum Standardsatz und fehlen in manchen Implementierungen Es soll aber hier gezeigt werden dass auch sie mit logarithmischem Aufwand durchgefuhrt werden konnen Verketten Bearbeiten nbsp Abb 4 Verkettung von 2 AVL BaumenZwei AVL Baume konnen mit logarithmischem Aufwand verkettet konkateniert werden englisch concat oder auch nur cat Fur die Sortierfolge mussen naturlich alle Schlussel des ersten Baums allen Schlusseln des zweiten vorangehen 12 Algorithmus Man steigt an der rechten Flanke des ersten Baums siehe Abbildung 4 die grauen Pfeile zeigen den Weg durch den Graphen und an der linken des zweiten bis zu den Blattern hinab und merkt sich die Knoten auf den Pfaden zusammen mit ihren Hohen Ohne Beschrankung der Allgemeinheit sei der erste Baum der hohere wie in der Abbildung Dem zweiten Baum wird sein erstes Element H in AVL Manier entnommen Es spielt nachher die Rolle eines Bindeglieds Die Hohe des zweiten Baums sei jetzt h moglicherweise 0 Man sucht nun in der rechten Flanke des ersten Baums nach einem Knoten G der Hohe h 1 oder h einen von beiden muss es geben gibt es beide wird der hohere bevorzugt Man macht G zum Kind des Bindeglieds H und den zweiten Baum zum zweiten Kind von H was bei H einen AVL konformen Balance Faktor von 0 oder 1 ergibt Dann wird H beim Elter F von G an Gs Stelle als Kind eingehangt Der Hohenunterschied zwischen dem neuen H und E ist zwischen 0 und 2 wenn E die Hohe h 1 hat dann hat G die Hohe h und das neue H die Hohe h 1 Nach einer ersten Anpassung mit eventueller Doppel Rotation mussen noch aufsteigend die Balance Faktoren wie bei einer Einfugung uberpruft und gegebenenfalls korrigiert werden Dabei kann die Hohe des Baums um 1 zunehmen Spalten Bearbeiten nbsp Abb 5 Spalten eines Binarbaums Dick rot gestrichelt Trennlinie spezifiziert durch Knoten Richtung I H displaystyle I to H nbsp aufzulosende Kind Elter Beziehung zwischen In und Hn 1H I displaystyle H cdot cdot cdot cdot cdot cdot I nbsp Pfad ohne Uberquerung der Trennlinie von Hn nach In A I H displaystyle I cdot cdot cdot cdot H nbsp Pfad trifft die Trennlinie zweimal von In nach Hn 2 Etwas komplizierter als das Verketten ist das Aufspalten englisch split eines AVL Baums in zwei separate AVL Baume an einem externen Knoten also einer Stelle zwischen zwei internen Knoten Schlusseln die als Paar Knoten Richtung einschliesslich des Pfades zur Wurzel gegeben sei Links davon liegt die linke Partition mit den kleineren Schlusseln und rechts davon die rechte mit den grosseren Die so definierte Trennlinie dick rot gestrichelt in der Abbildung 5 zerschneidet Kanten des Baums auf dem Pfad des Knotens zur Wurzel so dass sich links wie rechts ein Wald von Schnipseln ergibt Jeder der so definierten zwei Walder kann mit logarithmischem Aufwand zu einem AVL Baum zusammengefugt werden derart dass das Ergebnis einer nachfolgenden Verkettung dieser zwei AVL Baume in Bezug auf Eintrage und deren Reihenfolge zum ursprunglichen Baum aquivalent ist 12 Algorithmus Die Schnipsel sind Baume die bis auf eventuell einen Knoten Stummel H in den Abbildungen 5 und 6 auf hoher Ebene mit Ausgangsgrad 1 nicht unbedingt die Wurzel des Schnipsels in AVL Form sind Dieser fungiert beim Verketten mit dem nachstniedrigeren Schnipsel auf der gleichen Seite als Bindeglied Im Folgenden ist die Indizierung der Knoten so gewahlt dass auf der einen Seite der Trennlinie sich nur geradzahlige auf der anderen sich nur ungeradzahlige Indizes befinden Die Indizes wachsen beim Aufstieg in Richtung Wurzel Vollstandige Induktion auszufuhren aufsteigend auf beiden Seiten der TrennlinieInduktionsanfang Abbildung 5 Hat der gegebene die Trennlinie definierende Knoten ein Kind in der gegebenen Richtung dann befindet sich dieses auf der anderen Seite der Trennlinie ist in AVL Form und werde I1 genannt Der gegebene Knoten nunmehr ein Stummel werde H2 genannt H2 ist mit einem Schnipsel I0 welcher in diesem Fall leer ist zu verketten Hat der gegebene Knoten kein Kind in der gegebenen Richtung dann sei H2 sein niedrigster Vorfahr in jener Richtung also auf der anderen Seite der Trennlinie I1 sei dessen Kind auf der Seite des gegebenen Knotens es ist in AVL Form H2 ist ein Stummel der mit einem Schnipsel I0 welcher in diesem Fall leer ist zu verketten ist Damit ist I0 der leere Baum der niedrigste Schnipsel auf der einen und I1 auf der anderen Seite Beide sind in AVL Form Der Stummel H2 ist ursprunglicher Elter von I1 auf der Gegenseite der Trennlinie und niedrigster Vorfahr von I0 auf der gleichen Seite nbsp Abb 6 Ein Induktionsschritt beim Spalten eines AVL BaumsInduktionsschritt siehe Abbildungen 5 und 6 Beim n ten Induktionsschritt heisst der niedrigste Schnipsel In Obwohl die Seite bei jedem Induktionsschritt wechselt sei der Einfachheit der Erlauterung halber angenommen dass In wie I in der Abbildung 6 sich links von der Trennlinie befindet I ist nach Induktionsvoraussetzung ein AVL Baum Sein niedrigster Vorfahr auf der linken Seite ist der Stummel H Hn 2 Dessen rechtes Kind liegt auf der anderen Seite der Trennlinie ist auch schon in AVL Form und hat den Namen In 1 Die ursprungliche Hohe von H sei h Abbildung 6 oben Zerschnittene Elter Kanten schwarz gestrichelt mit Pfeil und die zuruckbleibenden Stummel erkennt man am Wechsel der Kindesrichtung beim Aufstieg im Pfad Dabei sind die ursprunglichen Hohen anhand der Balance Faktoren aufs genaueste mitzuschreiben Der Teilbaum des Einzelkindes D von H wird mit dem Schnipsel I unter Einsatz von H als Bindeglied verkettet Bei der Verkettung spielen die Knoten D F H und I in der Abbildung 6 dieselbe Rolle wie die Knoten gleichen Namens in der Abbildung 4 Dabei kann Ds Hohe um 1 zunehmen Falls nun H die Wurzel war ist der Algorithmus beendet mit D welches in AVL Form ist als der neuen Wurzel des linken Baums Falls H linkes Kind war wird D zum neuen niedrigsten Schnipsel auf der linken Seite erhalt den Namen In 2 und der Induktionsschritt n ist beendet War H rechtes Kind dann wird D zum dementsprechend rechten Kind bei seinem vormaligen Grosselter C gemacht damit zum Geschwister seines vormaligen Onkels B Die Hohendifferenz zu letzterem ist maximal 3 Die AVL Balance von C lasst sich durch Rotationen herstellen wobei die Hohe von C um 1 abnehmen kann Die Vorgehensweise bei einem Hohenunterschied von 3 ahnelt der bei einem von 2 Ist das innere Kind des hoheren Geschwisters niedriger als das aussere Kind kann man die AVL Balance mit einer Einfachrotation herstellen Ist es hoher kommt man mit einer Doppelrotation durch Sind beide Kinder gleich hoch hangt es vom Balance Faktor des inneren Kindes ab ist der hohengleich macht s eine Doppelrotation ist er aussenlastig schaffen s zwei Rotationen ist er innenlastig geht s mit drei Rotationen Man sucht auf der linken Seite aufsteigend nach dem ersten Vorfahr A In 2 im Pfad der linkes Kind oder Wurzel ist Sein Elter Hn 3 ist niedrigster Vorfahr von In 1 auf der rechten Seite Links auf den Ebenen hinauf bis A sind die Balance Faktoren wie bei einer Loschung zu uberprufen und gegebenenfalls anzupassen wobei die Hohe um 1 abnehmen kann Damit ist In so in den Schnipsel A integriert dass A oder ein anderer Knoten der sich bei einer eventuellen Rotation als Wurzel in den Pfad geschoben hat wieder ein AVL Baum ist und den niedrigsten Schnipsel In 2 des Induktionsschrittes n 2 auf dieser linken Seite darstellt Fur den folgenden Induktionsschritt n 3 aber werden die Seiten gewechselt rechts mit links vertauscht und den Knoten In 1 Hn 3 und In 3 die Rollen von In Hn 2 und In 2 zugewiesen Die innerhalb eines Induktionsschrittes besuchten Kanten graue Pfeile in der Abbildung 6 betreffen nur Ebenen zwischen den Wurzeln von zwei Schnipseln die auf derselben Seite ubereinander liegen In 2 uber In respektive In 3 uber In 1 Die Induktionsschritte auf der linken und rechten Seite greifen reissverschlussartig ineinander der Aufstieg auf der rechten wird auf der linken Seite beim Verketten ab und wieder aufgestiegen woran sich ein Aufstieg anschliesst der auf der rechten Seite ab und wieder aufgestiegen wird usw Eine Ebene wird hochstens dreimal besucht jedes Mal mit konstantem Aufwand Damit ist der Gesamtaufwand furs Spalten proportional zur Gesamthohe 13 Anwendungsbeispiele Bearbeiten Die Massenloschung von allen Schlusseln in einem zusammenhangenden Bereich Intervall kann durch zweimaliges Spalten und einmaliges Verketten geschehen oder wenn das kleinste oder grosste Element mit dabei ist durch einmaliges Spalten In ahnlicher Weise lasst sich ein Intervall mit logarithmischem Aufwand als AVL Baum aus einem AVL Baum herauspraparieren Eine Masseneinfugung kann durch einmaliges Spalten und zweimaliges Verketten durchgefuhrt werden sofern die Menge als AVL Baum vorbereitet ist und ihre Schlussel in einem Intervall liegen das im Zielbaum nicht vorkommt Implementierung BearbeitenZusatzlich zum Bedarf des binaren Suchbaums muss in einem Knoten der Balance Faktor mit seinen 3 Werten untergebracht werden macht 2 Bits Anm 11 Insbesondere wenn der Prozessor korrekt ausgerichtete Zeiger bevorzugt oder erzwingt konnen die Balance Bits von einem Zeigerfeld im Knoten absorbiert werden so dass sie kein extra Speicherwort benotigen Ansonsten gelten fur die Implementierung von AVL Baumen dieselben Empfehlungen wie fur die binaren Suchbaume im Allgemeinen Auf die Besonderheiten des AVL Cursors sei im Folgenden explizit eingegangen Cursor Bearbeiten Beim Suchen wird ein Paar Knoten Richtung erzeugt welches geeignet ist beim Einfugen den Einfugepunkt zu spezifizieren Beim Loschen wird der zu loschende Knoten durch die Komponente Knoten bezeichnet und die Komponente Richtung kann zur Angabe verwendet werden wohin der Cursor nach der Loschung fortschreiten soll Beim Traversieren gibt Knoten den Ausgangspunkt und Richtung die gewunschte Richtung der Navigation an um im Ergebnis wieder bei einem solchen Paar anzukommen Damit erzeugen und oder verbrauchen alle wichtigen Operationen ein Konstrukt das in Analogie zum Beispiel zu den Datenbanken Cursor genannt wird 14 Die Grosse des Cursors hangt entscheidend davon ab ob die AVL Knoten einen Zeiger zum Elter enthalten oder nicht Elterzeiger vorhanden Ein Paar Knoten Richtung stellt einen vollwertigen Cursor dar Ein Cursor wird nach einer den Cursor nicht pflegenden Operation dann und nur dann ungultig wenn es sich um eine Loschung des Knotens dieses Cursors handelt Mit dem prozentualen Aufschlag auf den Speicherbedarf fur die Datenstruktur erkauft man sich auf jeden Fall eine prozentuale Einsparung an Laufzeit da der Ruckweg zu Wurzel und Kopf immer schon gesichert ist Zeiger zum Elterknoten nicht vorhanden Cursor mit Stapel Zusatzlich zum Paar Knoten Richtung muss der Pfad vom Knoten zu Wurzel und Kopf im Cursor gehalten werden Die Lange des Cursors entspricht damit der maximalen Hohe des Baums Anm 12 Bei allen Operationen ist der Zugriff zum Elterknoten uber den Stapel im Cursor geringfugig teurer als uber den Elterzeiger Soll der Pfad im Cursor auch nach einer modifizierenden Operation gultig gehalten werden beispielsweise fur sequentielle Einfugungen oder Loschungen kommt noch ein zusatzlicher prozentualer im Mittel konstanter und im schlechtesten Fall logarithmischer Aufschlag hinzu Dies kann so aber nur fur einen Cursor den Eingabecursor erbracht werden In seinem technischen Bericht AVL dags 15 Anm 13 beschreibt G Myers ein Verfahren wie mehrere Versionen ein und desselben AVL Baums in eine Reihenfolge gebracht und in einer Weise miteinander verflochten werden konnen die einen logarithmischen Zeit und Speicherbedarf pro Version nicht uberschreitet Der AVL Baum ist dann eine so genannte persistente Datenstruktur englisch persistent data structure Trennung der navigierenden von den modifizierenden Operationen Bearbeiten Die Einfuhrung des Cursors erlaubt die Modularisierung der Navigations von den modifizierenden Operationen Diese setzt den im Mittel unterlogarithmischen sprich konstanten Aufwand der letzteren frei denn ein Aufstieg bis zur Wurzel ist wie in den Anmerkungen gezeigt Anm 7 Anm 9 nur in Ausnahmefallen erforderlich In Anwendungen mit starkem sequentiellem Anteil kann sich das positiv auf die Laufzeit auswirken Parallelisierung Bearbeiten Das wesentlichen Probleme bei paralleler Verarbeitung von AVL Baumen ist dass der Zugriff auf den Baum nicht nur von der Wurzel zu den Blattern des Baumes erfolgt sondern auch von den Blattern zur Wurzel Dieses hat zur Folge dass Deadlocks entstehen konnen falls sich ein oder mehrere von Oben nach Unten und von Unten nach Oben arbeitende Prozesse in einem Knoten treffen Ganze Teile des Baumes mussen daher also gesperrt werden wenn Rebalancierungen von Knoten erfolgen konnen Bei iterativer Programmierung kann die Uberprufungs und Reparaturschleife auch in der umgekehrten Richtung das heisst antizipierend von Kopf und Wurzel zum Blatt durchlaufen werden 16 Das ist insbesondere dann interessant wenn auf den Baum hochgradig parallel konkurrent zugegriffen werden soll Zum Beispiel wurde in einem Szenario Suchen und Einfugen die Suchoperation sich den tiefsten letzten hohenungleichen Knoten auf dem Pfad merken ab dort den Baum sperren Anm 14 und die Vergleichsergebnisse aufbewahren Zum Fertigstellen der Einfugeoperation musste dann der gesperrte Vorfahr gegebenenfalls nach einer Rebalancierung auf hohengleich und alle seine Nachfahren bis zum Blatt auf die den eingeschlagenen Richtungen entsprechenden Balance Faktoren gesetzt werden Der Vorteil ware dass alle Knoten ausserhalb des gesperrten Teilbaums von den anderen Prozessorkernen parallel zur laufenden Einfugung konsistent besichtigt und auch verandert werden konnten Dieses Verhalten vermeiden die verzogerten AVL Baume die vollig ohne Stack oder Rekursion auskommen und den Baum nur in einer Richtung von der Wurzel zu den Blattern durchlaufen Das Rebalancieren erfolgt dann verzogert beim nachsten Suchen Daher muss nicht nur die Balance eines Knotens gespeichert werden sondern ebenfalls die noch in Richtung der Wurzel des Baumes weiterzureichende Tiefenanderung Ein verzogerter AVL Baum 17 ist ein erweiterter AVL k Baum bei demDie Balance der Knoten die erweiterte AVL Bedingung k B F t k displaystyle k leq mathrm BF t leq k nbsp fur ein festes k N displaystyle k in mathbb N nbsp an jedem Knoten t displaystyle t nbsp eingehalten wird In den Knoten wird zusatzlich zur Balance die weiterzureichende Tiefenanderung des Knotens gespeichert wird Bei den Operationen Einfugen oder Loschen eines Knotens wird nur der direkte Vorganger wegen einer notwendigen Zeigeranderung berichtigt Beim Suchen eines Knotens wird fur jeden Knoten des Suchweges die Balance aus der Tiefe der beiden Teilbaume berechnet oder die Tiefenanderung aus dem rechten oder linken Teilbaum weitergegeben Falls die Balance nicht im erlaubten Bereich liegt wird dieser Knoten dann rebalanciert Die resultierende Tiefenanderung wird direkt in den Knoten gespeichert aber nicht mehr in Richtung der Wurzel weitergegeben Da verzogerte AVL Baume nur in einer Richtung durchlaufen werden kann die Bedingung fur eine Deadlock Circular Wait hier nicht eintreten Die Balancierung der Knoten erfolgt dadurch verzogert beim Suchen Mit einer atomaren Compare and Swap Operation CAS englisch fur Vergleichen und Tauschen ist eine Locking und Synchronisationsoperationen auf den zu sperrenden Knoten leicht zu implementieren Vergleich mit Rot Schwarz Baum BearbeitenDie Menge der AVL Baume ist eine echte Teilmenge in der Menge der Rot Schwarz Baume Denn jeder Binarbaum der das AVL Kriterium erfullt lasst sich in einer das Rot Schwarz Kriterium erfullenden Weise einfarben 18 Beweis nbsp 4 kleine AVL Baume in Rot Schwarz Farbung Bei den geteilten Knoten gehen beide Farben Behauptung Hat der AVL Baum eine gerade Hohe h displaystyle h nbsp dann lasst er sich mit Schwarztiefe h 2 displaystyle tfrac h 2 nbsp bei schwarzer Wurzel einfarben ist h displaystyle h nbsp ungerade dann mit Schwarztiefe h 1 2 displaystyle tfrac h 1 2 nbsp bei einer roten oder mit Schwarztiefe h 1 2 displaystyle tfrac h 1 2 nbsp bei einer schwarzen Wurzel Die NIL Knoten sind dabei nicht mitgezahlt Beweis Die Behauptung ist richtig fur h 1 displaystyle h leq 1 nbsp siehe Abbildung Bei grosserem geradem h displaystyle h nbsp gibt es einen Kindbaum mit der ungeraden Hohe h 1 displaystyle h 1 nbsp der sich nach Induktionsvoraussetzung mit roter Wurzel und Schwarztiefe h 2 2 displaystyle tfrac h 2 2 nbsp einfarben lasst Hat der andere Kindbaum dieselbe Hohe so gilt fur ihn dasselbe Ist er niedriger dann ist seine Hohe h 2 displaystyle h 2 nbsp und gerade er lasst sich also mit der gleichen Schwarztiefe bei schwarzer Wurzel einfarben Nachdem die neue Wurzel schwarz eingefarbt ist ist die Schwarztiefe im zusammengesetzten Baum h 2 displaystyle tfrac h 2 nbsp Bei grosserem ungeradem h displaystyle h nbsp hat einer der Kindbaume oder beide die gerade Hohe h 1 displaystyle h 1 nbsp die sich mit schwarzer Wurzel bei Schwarztiefe h 1 2 displaystyle tfrac h 1 2 nbsp einfarben lasst Ist der andere Kindbaum niedriger dann ist seine Hohe h 2 displaystyle h 2 nbsp und ungerade lasst sich also mit glucklicherweise derselben Schwarztiefe h 1 2 displaystyle tfrac h 1 2 nbsp bei schwarzer Wurzel einfarben Alle Kindbaume haben schwarze Wurzeln also kann die neue Wurzel rot eingefarbt werden und es ergibt sich eine Schwarztiefe von h 1 2 displaystyle tfrac h 1 2 nbsp Wird die neue Wurzel jedoch schwarz eingefarbt dann ist die neue Schwarztiefe h 1 2 displaystyle tfrac h 1 2 nbsp nbsp Kein AVL BaumEs gibt aber Rot Schwarz Baume die das AVL Kriterium nicht erfullen Die nebenstehende Abb zeigt zum Beispiel einen Rot Schwarz Baum mit 6 inneren Knoten und der externen Pfadlangensumme 21 wahrend 20 die grosste externe Pfadlangensumme bei AVL Baumen und zugleich die kleinstmogliche fur alle Binarbaume dieser Grosse ist Konsequenterweise ist auch die Worst Case Hohe des AVL Baums kleiner als die des Rot Schwarz Baums und zwar um den Faktor c 2 0 720 displaystyle frac c 2 approx 0 720 nbsp mit obigem c 1 log 2 F displaystyle c frac 1 log 2 Phi nbsp und dem Faktor 2 aus dem Hohenbeweis des Rot Schwarz Baums Allgemein werden AVL Baume als besser balanciert und ihr Suchzeitverhalten als gunstiger angesehen Der Speicherplatzbedarf ist praktisch identisch 1 Bit fur die Farbe gegenuber 2 oder auch 1 Bit s Anm 11 fur den Balance Faktor Der Platzbedarf und das Laufzeitverhalten fur die angefuhrten Operationen ist im Mittel und im Worst Case identisch Das gilt auch fur die amortisiert konstanten Modifikationskosten beim Einfugen 9 Zwar bietet der Rot Schwarz Baum amortisiert konstante Modifikationskosten auch beim Loschen 19 und der AVL Baum dort nur Anm 15 im Mittel konstante Anwendungen von binaren Suchbaumen die nur Sequenzen von Einfugungen und Loschungen ganz ohne intervenierende Suchoperationen enthalten gehen am Zweck des Suchbaums vorbei Sieht man also von dieser Art Anwendungen ab ist das Gesamtverhalten einer Mischung von Suchen und Modifikation bei beiden Datenstrukturen amortisiert im Mittel und im Worst Case logarithmisch Realistische Anwendungssituationen mit Performancedaten und vergleichen auch mit weiteren Suchalgorithmen und Spielarten der Datenstrukturen finden sich bei Ben Pfaff 20 Seine Ergebnisse zeigen in 79 Messungen unter anderem die sehr grosse Ahnlichkeit von AVL Baumen AVL und Rot Schwarz Baumen RB mit Laufzeitverhaltnissen AVL RB zwischen 0 677 und 1 077 bei einem Median von 0 947 und einem geometrischen Mittelwert von 0 910 Anwendungen BearbeitenAls grundlegende Hilfsmittel der Informatik haben die binaren Suchbaume ein grosses Einsatzgebiet in welchem sie aber auch hochgradig untereinander austauschbar sind Konkrete Beispiele und Auswahlkriterien finden sich in Binarer Suchbaum Anwendungen Weitere Baumstrukturen BearbeitenBinarbaum Binarer Suchbaum Balancierter Baum Rot Schwarz Baum Splay Baum Gewichteter binarer Suchbaum Fibonacci BaumLiteratur BearbeitenThomas H Cormen Charles E Leiserson Ronald L Rivest Clifford Stein Introduction to Algorithms 2 Auflage MIT Press Cambridge MA 2001 ISBN 0 262 03293 7 Ralf Hartmut Guting Stefan Dieker Datenstrukturen und Algorithmen Stuttgart 2004 ISBN 978 3 519 22121 0 Donald E Knuth The Art of Computer Programming 2 Auflage Band 3 Sorting and Searching Addison Wesley 1998 ISBN 0 201 89685 0 6 2 3 Balanced Trees S 458 478 Udi Manber Introduction to Algorithms A Creative Approach Addison Wesley Publishing Company 1989 Kapitel 4 3 4 S 75ff Kurt Mehlhorn Datenstrukturen und effiziente Algorithmen Teubner Stuttgart 1988 ISBN 3 519 12255 3 Bernhard Wagner Effiziente hohenbalancierte Binarbaume Die neuen Algorithmen mit Beweis ihrer Korrektheit 1 Auflage 2022 ISBN 979 8 35722559 7 Weblinks Bearbeiten nbsp Commons AVL Baume Sammlung von Bildern Videos und Audiodateien Paul E Black AVL tree In Dictionary of Algorithms and Data Structures National Institute of Standards and Technology NIST 7 Juli 2014 abgerufen am 27 Juli 2016 englisch Algorithmenvisualisierung unter anderem fur AVL Baume Kurz gehaltene Beschreibung der Rotationen AvlTree cs vom 10 August 2012 Ben Pfaff An Introduction to Binary Search Trees and Balanced Trees Free Software Foundation Boston 2004 gnu org PDF gzip 1675 kB Ben Pfaff Performance Analysis of BSTs in System Software Stanford University 2004 stanford edu PDF 316 kB Einzelnachweise Bearbeiten G M Adelson Velsky E M Landis Odin algoritm organizacii informacii In Doklady Akademii Nauk SSSR 146 Jahrgang 1962 S 263 266 russisch Englische Ubersetzung von Myron J Ricci An algorithm for the organization of information Memento vom 1 Februar 2014 im Internet Archive PDF In Soviet Mathematics 3 1962 S 1259 1263 Thomas H Cormen u a Introduction to Algorithms 2 Auflage MIT Press Cambridge Massachusetts 2001 S 296 In der englischen Literatur meist balance factor so bei Donald E Knuth The Art of Computer Programming Band 3 Sorting and Searching 2 Auflage Addison Wesley 1998 S 459 Hohenbalance bei Kurt Mehlhorn Datenstrukturen und effiziente Algorithmen Teubner Stuttgart 1988 S 295 Donald E Knuth The Art of Computer Programming Band 3 Sorting and Searching 2 Auflage Addison Wesley 1998 S 460 Ben Pfaff Performance Analysis of BSTs in System Software S 2 s Donald Knuth The Art of Computer Programming S 460 Diesen Weg geht Donald Knuth in The Art of Computer Programming S 462 so Ben Pfaff in An Introduction to Binary Search Trees and Balanced Trees 34 a b Dinesh P Mehta Sartaj Sahni Hrsg Handbook of Data Structures and Applications 10 4 2 Laut Robert Sedgewick Kevin Wayne Algorithms Fourth Edition PDF https bank engzenon com tmp 5e7f6ee5 d4dc 4aa8 9b0a 42d3c0feb99b 6062caf3 c600 4fc2 b413 4ab8c0feb99b Algorithms 4th Edition pdf PDF Pearson Education 2011 ISBN 978 0 321 57351 3 S 410 englisch abgerufen am 25 Marz 2018 stammt der Vorschlag aus dem Jahr 1962 von T Hibbard In An Introduction to Binary Search Trees and Balanced Trees S 39 wahlt Ben Pfaff so vorhanden stets den letzteren Man kann aber auch den ersteren nehmen oder von beiden Teilbaumen den eventuell hoheren Die Abbildungen entsprechen Donald Knuth The Art of Computer Programming S 461 Case1 Einfachrotation und Case2 Doppelrotation a b Donald E Knuth The Art of Computer Programming Band 3 Sorting and Searching 2 Auflage Addison Wesley 1998 S 474 Costin S der in seinem Projekt AvlTree cs AVL Baume mit Concat und Split Operationen implementiert fordert dazu die Aufzeichnung der vollen absoluten Hohe in jedem Knoten Man kann aber wie gezeigt mit den Balance Faktoren auskommen ohne den Aufwand zu erhohen Ben Pfaff gibt einem Objekt mit sehr ahnlicher Funktionalitat den Namen traverser und offeriert fur Suchen Einfugen und Loschen eine Standard und eine Traverser Variante An Introduction to Binary Search Trees and Balanced Trees S 15 und Performance Analysis of BSTs in System Software S 3 Eugene W Myers AVL dags In Technical Report Department of Computer Science U of Arizona 82 9 Jahrgang 1982 Zitiert nach Neil Sarnak Robert E Tarjan Planar Point Location Using Persistent Search Trees In Communications of the ACM 29 Jahrgang Nr 7 1986 S 669 679 doi 10 1145 6138 6151 link cs cmu edu Memento des Originals vom 10 Oktober 2015 im Internet Archive abgerufen am 25 Dezember 2014 Top Down Strategie bei Kurt Mehlhorn Datenstrukturen und effiziente Algorithmen Teubner Stuttgart 1988 S 197 198 Bernhard Wagner Effiziente hohenbalancierte Binarbaume 1 Auflage 2022 ISBN 979 83 5722559 7 Kapitel 5 2 6 S 120 ff Paul E Black AVL tree In Dictionary of Algorithms and Data Structures National Institute of Standards and Technology 13 April 2015 abgerufen am 2 Juli 2016 englisch Kurt Mehlhorn Peter Sanders Algorithms and Data Structures The Basic Toolbox Springer Berlin Heidelberg 2008 ISBN 978 3 540 77977 3 doi 10 1007 978 3 540 77978 0 S 165 Ben Pfaff Performance Analysis of BSTs in System Software Stanford University 2004 Anmerkungen Bearbeiten Da einem Knoten in umkehrbar eindeutiger Weise der von ihm gewurzelte maximale Unterbaum sein Teilbaum zugeordnet werden kann sollen der Kurze halber Eigenschaften wie Hohe Balance Elter Kind und Geschwister Beziehung usw einem Knoten und einem solchen Teilbaum in gleicher Weise zukommen Spielt dabei die Beziehung zum Elter eine Rolle so sei noch spezifischer vom linken oder rechten Kindbaum die Rede Umgekehrt fungiert zum Beispiel beim Umhangen eines Teilbaums dessen Wurzel als Henkel Im Prinzip kann man auch die gespiegelte Differenz nehmen Der Text folgt Knuth und vielen weiteren Autoren Die Rekursionsgleichung fur die Hohe ist H e i g h t t 1 max H e i g h t t r H e i g h t t l displaystyle mathrm Height t 1 max mathrm Height t r mathrm Height t l nbsp Aus den Balance Faktoren 2 Bits pro Knoten lassen sich alle relevanten Daten fur Einfugen und Loschen berechnen es bedarf nicht der Kenntnis der absoluten Hohen gemass der Definition Binarer Suchbaum Abb1A bei der die Knotenebenen gezahlt werden und der nur aus der Wurzel bestehende Baum die Hohe 1 hat Strebt beim Fibonacci Baum die Anzahl n displaystyle n nbsp der Knoten gegen unendlich dann verhalt sich seine mittlere Suchtiefe asymptotisch wie a log 2 n displaystyle a log 2 n nbsp mit a c F 5 F 5 log 2 F 1 042 298 displaystyle a frac c Phi sqrt 5 frac Phi sqrt 5 log 2 Phi approx 1 042298 nbsp weicht also nur um etwa 4 Prozent von der idealen eines vollstandigen Binarbaums ab Allerdings sind hinsichtlich der Suchtiefe nicht notwendigerweise die Fibonacci Baume am schlechtesten balanciert bspw gibt es einen AVL Baum der Hohe 5 mit 20 Knoten linker Teilbaum vollstandig der Hohe 4 rechter Fibonacci der Hohe 3 und der externen Pfadlangensumme 97 im Vergleich zu 96 beim Fibonacci Baum der Hohe 6 mit gleicher Knotenzahl Diese AVL Baume sind aber schwieriger zu charakterisieren als die Fibonacci Baume a b Sei G displaystyle G nbsp die Anzahl der Knoten die nicht Blatter sind und die zwei Kindbaume gleicher Hohe haben und U displaystyle U nbsp die Anzahl der Knoten mit verschieden hohen Kindbaumen dann ist u U G U 0 1 displaystyle u tfrac U G U in 0 1 nbsp der Anteil der hohenungleichen Nur die Fibonacci Baume und die anderen dunnsten AVL Baume erreichen exakt u 1 displaystyle u 1 nbsp Dagegen kommen nur die vollstandigen Binarbaume mit 2 h 1 1 displaystyle 2 h 1 1 nbsp inneren Knoten auf exakt u 0 displaystyle u 0 nbsp Der Mittelwert uber alle moglichen Formen von AVL Baumen liegt bei u 0 3 displaystyle u approx 0 3 nbsp Von folgender Situation sei rekursiv ausgegangen Bei einer Einfugung habe sich ergeben dass die Hohe des Teilbaums in dem die Einfugung stattfand um 1 zugenommen hat Ferner sei angenommen dass es sich um einen rechten Kindbaum handelt dazu passen die Abbildungen 2 und 3 die gespiegelte Alternative linker Kindbaum sei dem Leser uberlassen sie fuhrt zu denselben Werten Bei der Uberprufung der Lage im Elterknoten dieses Teilbaums sind die folgenden Falle zu unterscheiden BFvorEinfugung Haufigkeit vorlau figerBF Rebalan cierungerforderlich BFda nach Teilbaumwirdhoher um Ebene ober halb zuuberprufen 1 links hoher u 2 displaystyle tfrac u 2 nbsp 0 Nein 0 Nein0 hohengleich 1 u displaystyle 1 u nbsp 1 Nein 1 Ja 1 rechts hoher u 2 displaystyle tfrac u 2 nbsp 2 Ja 0 0 NeinTab 2 Nach dem Einfugen Die neuen Balance Faktoren BF in Abhangigkeit von den altenDie Wahrscheinlichkeit bei einer Einfugung ausgehend von einer Ebene die nachsthohere uberprufen zu mussen ist also q 1 u displaystyle q 1 u nbsp Unter der Annahme dass diese Wahrscheinlichkeiten fur alle Ebenen gleich sind ist die Wahrscheinlichkeit dass wenigstens n displaystyle n nbsp Ebenen uberpruft werden mussen gleich q n displaystyle q n nbsp und dass genau n displaystyle n nbsp Ebenen uberpruft werden mussen gleich q n q n 1 1 q q n displaystyle q n q n 1 1 q q n nbsp Somit summiert sich die Anzahl der zu uberprufenden Ebenen im Mittel auf 1 q q 2 q 2 3 q 3 q q 2 q 3 q 1 q 1 u 1 1 u 1 u u displaystyle begin aligned 1 q q 2q 2 3q 3 amp q q 2 q 3 amp frac q 1 q frac 1 u 1 1 u frac 1 u u end aligned nbsp Diese Funktion in u displaystyle u nbsp fallt monoton von displaystyle infty nbsp fur u 0 displaystyle u 0 nbsp und vollstandige Binarbaume auf 0 displaystyle 0 nbsp fur u 1 displaystyle u 1 nbsp und Fibonacci Baume Nach dem Einfugen mit Korrektur des Balance Faktors ist fur u 0 25 0 5 displaystyle u in 0 25 0 5 nbsp die mittlere Anzahl der nachtraglich zu uberprufenden Ebenen zwischen 3 und 1 Wie beim Einfugen kann der Baum auch beim Loschen von oben nach unten top down repariert werden Der Einfachheit halber sei hier nur die Reparatur von unten nach oben bottom up erlautert So spielt sie sich auch bei rekursiver Programmierung ab a b Uber den Anteil der hohenungleichen Knoten seien dieselben Annahmen wie bei der Einfugung gemacht Folgende Situation sei rekursiv angenommen Nach einer Loschung habe sich die Hohe des Teilbaums in dem die Loschung stattfand um 1 vermindert Ferner handele es sich ohne Beschrankung der Allgemeinheit um einen linken Kindbaum Bei der Uberprufung der Lage im Elterknoten dieses Teilbaums sind die folgenden Falle zu unterscheiden BFvorLoschung Haufigkeit vorlau figerBF Rebalan cierungerforderlich BFda nach Teilbaumwird nied riger um Ebene ober halb zuuberprufen 1 links hoher u 2 displaystyle tfrac u 2 nbsp 0 Nein 1 Ja0 hohengleich 1 u displaystyle 1 u nbsp 1 Nein 0 Nein 1 rechts hoher u 2 displaystyle tfrac u 2 nbsp u 2 1 u displaystyle tfrac u 2 1 u nbsp 2 Ja 1 0 1 Neinu 2 u 2 u 2 displaystyle tfrac u 2 tfrac u 2 tfrac u 2 nbsp 0 1 2 Ja1 Die vorletzte Zeile bezieht sich auf den Fall der Einfachrotation mit gleich hohen Kindern und 2 die letzte auf Rotationen mit nicht gleich hohen Kindern des hoheren Knotens Z s Abb 2 und 3 d h Doppelrotation linkes Kind Y hoher resp Einfachrotation mit dem rechten Kind t4 hoher Tab 3 Nach dem Loschen Die neuen Balance Faktoren BF in Abhangigkeit von den altenBei einer Loschung ergibt sich eine Wahrscheinlichkeit q u 2 1 u displaystyle q tfrac u 2 1 u nbsp fur das Erfordernis die nachsthohere Ebene uberprufen zu mussen Unter der Annahme dass diese Wahrscheinlichkeiten fur alle Ebenen gleich sind summiert sich die mittlere Anzahl der zu uberprufenden Ebenen auf q 1 q u 1 u 2 u 1 u displaystyle frac q 1 q frac u 1 u 2 u 1 u nbsp Diese Funktion in u displaystyle u nbsp wachst monoton von 0 displaystyle 0 nbsp fur u 0 displaystyle u 0 nbsp und vollstandige Binarbaume auf displaystyle infty nbsp fur u 1 displaystyle u 1 nbsp und Fibonacci Baume Nach dem Loschen mit Korrektur des Balance Faktors muss fur u lt F 1 0 618 displaystyle u lt Phi 1 approx 0 618 nbsp im Mittel weniger als ungefahr eine weitere Ebene uberpruft werden Man beachte dass im Fall eines rechtslastigen Y die erste Teilrotation einer Doppelrotation die Situation im betroffenen Teilbaum Y sogar verschlechtert erst die zweite mit einer Rotationsachse ausserhalb bringt die Sache in Ordnung Somit entspricht was die Balance Faktoren angeht weder die erste noch die zweite Teilrotation einer AVL Einfachrotation a b 1 Bit wenn bei den Kindern aufgezeichnet Wird dem Bit die Bedeutung Hohensprung oberhalb gegeben dann kann die Hohe im Pfad ohne Kenntnis der Kindesrichtung berechnet werden Dennoch es ist fur die Modifikationsoperationen geschickter die 2 Balance Bits in einem Byte nebeneinander zu haben Als eine Datenstruktur die im homogenen Arbeitsspeicher Hauptspeicher untergebracht ist ist der AVL Baum durch dessen Grosse beschrankt also auch die Hohe des Baums und die Langen der Pfade von Blatt zu Wurzel Gangig sind Hauptspeicher mit 32 Bit und 64 Bit breiten 8 Bit Byte Adressen BreiteeinesZeigersin Bit maximale Anzahl adressierbarer Bytes minimale Knotenlange 2 Zeiger 1 Byte Nutzdaten 1 maxi male Anzahl Knoten Knotenzahl des nachstgrosseren Fibonacci Baums der Hohe32 4294967296 2 4 1 3 12 3 6 108 433494436 4164 18446744073709551616 2 8 1 7 24 7 7 1018 1100087778366101930 861 inklusive Schlussel Bei mehr Nutzdaten und weniger Hauptspeicher verringert sich die maximale Knotenzahl und Hohe entsprechend Tab 4 Maximale Hohe in Abhangigkeit von der AdressierungsbreiteFazit Es ist bei AVL Baumen vertretbar Cursor mit Stapeln bereitzustellen die so gross sind dass ein Uberlauf nicht auftreten kann dag fur Directed Acyclic Graph deutsch Gerichteter azyklischer Graph Genau genommen bedarf es einer Kette mit den Gliedern Sperren Kind und Entsperren Elter bis zum ersten hohenungleichen Knoten der zunachst gesperrt bleibt bis er in ein neues Wechselspiel mit den Gliedern Sperren hohenungleichen Knoten und Entsperren Vorfahr eintritt Dabei bedeutet Sperren Knoten eigentlich Sperren Teilbaum Und bei einer potentiellen Rebalancierung muss die Sperre sogar eine Ebene hoher gehalten werden Ist der Einfugepunkt erreicht kann auch schon mit der Korrektur und Entsprerrschleife begonnen werden fur maximale Parallelitat wieder in einer Kind Elter Kette Wenn alle nebenlaufigen Mitspieler diese Gerichtetheit des Sperrprotokolls einhalten kann eine zirkulare Abhangigkeit und damit eine Verklemmung deadlock nicht entstehen Bei einem vollstandigen Binarbaum bedingt eine m displaystyle m nbsp fache Schleife bestehend aus Einfugung eines zusatzlichen Knotens und Loschung desselben jedes Mal die Anpassung von h log 2 n 1 displaystyle h log 2 n 1 nbsp Balance Faktoren bis hinauf zur Wurzel und damit einen Aufwand in O m log n displaystyle mathcal O m log n nbsp also amortisiert O log n displaystyle mathcal O log n nbsp nbsp Dieser Artikel wurde am 5 Februar 2014 in dieser Version in die Liste der lesenswerten Artikel aufgenommen Abgerufen von https de wikipedia org w index php title AVL Baum amp oldid 239023797