1 / 64

Gebalanceerde bomen

Gebalanceerde bomen. Zoekbomen: weglaten in rood-zwart-bomen. Dit onderwerp. We zagen: Veel operaties op zoekbomen gaan in O(h) met h de hoogte van de zoekboom Gebalanceerde bomen: AVL en rood-zwart Deze hebben O(log n) hoogte

lucio
Download Presentation

Gebalanceerde bomen

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. Gebalanceerde bomen Zoekbomen: weglaten in rood-zwart-bomen

  2. Dit onderwerp • We zagen: • Veel operaties op zoekbomen gaan in O(h) met h de hoogte van de zoekboom • Gebalanceerde bomen: AVL en rood-zwart • Deze hebben O(log n) hoogte • Je kan knopen invoegen in O(hoogte) tijd en er daarbij voor zorgen dat de eigenschap behouden blijft • Techniek: rotaties • Hier: weglaten van knopen in rood-zwart-boom

  3. Zoekbomen herhaling • Allerlei operaties kunnen in O(h) tijd op een zoekboom met hoogte h: • Bepaal of element aanwezig is (en geef sateliet-data) • Minimum • Maximum • Voorganger • Opvolger • Dynamic order statistics: • Rang • Aantal elementen met waarde tussen bepaalde grenzen • En er zijn er meer …

  4. Rotatie • Idee: verander de zoekboom lokaal zodat • Eigenschappen van zoekboom behouden blijft • Hij beter in balans komt 17 14 14 17

  5. Root(T) Root(T) 5 3 3 5 8 8 13 13 Door rotatie kan je deboom meer in balansbrengen

  6. AVL-bomen • Genoemd naar uitvinders: Adel’son-Vel’skii en Landis • Elke knoop houdt zijn hoogte bij en • Broers hebben verschillen nooit meer dan 1 in hoogte 26 5 41 4 17 4 47 2 14 3 21 2 30 3 10 2 16 2 23 1 28 1 38 2 19 1 43 1 35 1 39 1 7 1 12 1 15 1

  7. Over AVL-bomen • Een AVL-boom is een binaire zoekboom met de eigenschap dat voor elke knoop de hoogtes van zijn kinderen hooguit 1 verschillen • Als een knoop maar 1 kind heeft, dan heeft dat kind hoogte 1 (d.w.z., is een blad) • StellingEen AVL-boom met n knopen heeft diepte O(log n). • We zagen: 2 log n+2

  8. Hoe zorgen we dat een AVL-boom een AVL-boom blijft? • Houd de hoogtes bij: • Bij elke knoop x hebben we een variabele hoogte(x) • Knoop zonder kinderen heeft hoogte(x)=1 • Knoop x met 1 kind y heeft hoogte(x) = hoogte(y)+1 • Knoop x met 2 kinderen y en z heefthoogte(x) = max(hoogte(y),hoogte(z))+1 • Als we de boom veranderen moeten we de hoogtes herberekenen: ALLEEN voor die plekken waar wat verandert en alle voorgangers hiervan • Als we een knoop tegenkomen waar de AVL-boom eigenschap niet langer geldt dan gaan we roteren om de eigenschap te herstellen

  9. Invoegen van een knoop in AVL-boom • Zoek een blad waar de knoop kan worden ingevoegd • Voeg de knoop daar in • Nu herstellen van de AVL-boom eigenschap • Loop van de knoop omhoog de boom in • Bereken steeds de juiste hoogtes opnieuw voor de knopen die betrokken zijn • Als de AVL-boom eigenschap niet geldt dan: hoogteverschil tussen broers is precies 2: roteer • Roteer zodat de knoop met grootste hoogte omhoog gaat • Herhaal dit totdat je klaar bent: • Klaar als je bij de wortel bent • Klaar als er niets verandert (hoogte onveranderd en geen rotatie)

  10. Een voorbeeld 26 5 41 4 17 4 47 2 13 3 21 2 30 3 10 2 16 2 23 1 28 1 38 2 19 1 43 1 35 1 39 1 7 1 12 1 15 1 Stel we voegen 14 toe 14

  11. 1 14 is toegevoegd 26 5 41 4 17 4 47 2 13 3 21 2 30 3 10 2 16 2 23 1 28 1 38 2 19 1 43 1 35 1 39 1 7 1 12 1 15 1 14 1 Herbereken hoogte

  12. 2 26 5 41 4 17 4 47 2 13 3 21 2 30 3 10 2 16 2 23 1 28 1 38 2 19 1 43 1 35 1 39 1 7 1 12 1 15 2 14 1 Herbereken hoogtehoogte wordt 2 15 is in balans

  13. 3 Een stap omhoog 26 5 41 4 17 4 47 2 13 3 21 2 30 3 10 2 16 2 23 1 28 1 38 2 19 1 43 1 35 1 39 1 7 1 12 1 15 2 Herbereken hoogte 14 1

  14. 4 Opnieuw balanceren 26 5 41 4 17 4 47 2 13 3 21 2 30 3 10 2 16 3 23 1 28 1 38 2 19 1 43 1 35 1 39 1 7 1 12 1 15 2 Herbereken dieptehoogte is 3 16 is NIET in balans 14 1

  15. 5 Opnieuw balanceren 26 5 41 4 17 4 47 2 13 3 21 2 30 3 10 2 16 3 23 1 28 1 38 2 19 1 43 1 35 1 39 1 7 1 12 1 15 2 16 is NIET in balansWe gaan roteren 14 1

  16. 6 26 5 41 4 17 4 47 2 13 3 21 2 30 3 10 2 23 1 28 1 38 2 19 1 43 1 15 2 35 1 39 1 7 1 12 1 14 1 16 3 Na rotatie(hoogtes tijdelijk fout)

  17. 7 26 5 41 4 17 4 47 2 13 3 21 2 30 3 10 2 23 1 28 1 38 2 19 1 43 1 15 2 35 1 39 1 7 1 12 1 14 1 16 1 Herbereken hoogtesvoor geroteerde knopen

  18. 8 26 5 41 4 17 4 47 2 13 3 21 2 30 3 10 2 23 1 28 1 38 2 19 1 43 1 15 2 35 1 39 1 7 1 12 1 14 1 16 1 Een stap omhoog:13 in balans en correcte hoogteKlaar

  19. Rood-zwart-bomen • Binaire zoekboom • Iedere knoop heeft de volgende velden: • Kleurbit: roodof zwart • Key • Left (pointer naar linkerkind) • Right (pointer naar rechterkind) • P (Parent) (pointer naar ouder) • Met een Boolean kunnen we de kleur bijhouden. We schrijven hier: rood en zwart ipv. bitwaarde voor notatiegemak.

  20. Rood-zwart eigenschappen • Een binaire zoekboom is een rood-zwart-boom, als de volgende rood-zwart eigenschappen gelden: • Elke knoop is roodof zwart • De wortel is zwart • Bladeren (die NIL zijn) zijn zwart • Als een knoop rood is, dan zijn allebei zijn kinderen zwart • Voor elke knoop v geldt: elk pad van v naar een blad onder v heeft hetzelfde aantal zwarte knopen

  21. NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL Een voorbeeld van een rood-zwart-boom 26 41 17 47 14 21 30 10 16 19 23 28 38 35 39 7 12 15 20 3

  22. We tekenen de boom zonder de NIL-knopen 26 41 17 47 14 21 30 10 16 19 23 28 38 35 39 7 12 15 20 3

  23. Implementatie van NIL-knopen • Er zijn verschillende implementaties van de NIL-knopen mogelijk: • Gewoon aparte knoop voor elke NIL-knoop • Geen object-verwijzing in NIL-knoop (extra test bij bijv. Zoekacties op dit soort verwijzingen) • Boolean’s • In het boek wordt het volgende gedaan: • Alle NIL-knopen worden door een en hetzelfde object gerepresenteerd • Die ene NIL-knoop is ook de parent van de root • Deze knoop heet NIL[T] • Verschillende implementaties kunnen in de constante, verstopt in de O-notatie, uitmaken

  24. Implementatie boek 26 41 17 47 14 21 30 10 16 19 23 28 38 35 39 7 12 15 20 3

  25. Hoogte-analyse van rood-zwartbomen 1 Definitie: de zwart-hoogte(black-height) van een knoop x, notatie zh(x) is het aantal zwarte knopen van x naar een blad. We tellen x zelf niet mee, het blad wel. • Vanwege eigenschappen van rood-zwartbomen: het hangt niet af welk blad we bekijken (eigenschap 5) LemmaLaat x een knoop zijn. Als x zwarthoogte r heeft, dan bevat de deelboom, gevormd door x en al zijn afstammelingen tenminste 2r-1 niet-NIL knopen. Lemma De wortel van een rood-zwartboom met n interne knopen heeft zwarthoogte hooguit log (n+1). Stelling De hoogte van een rood-zwartboom is hooguit 2 log(n+1).

  26. zh(x) 3 26 3 41 17 2 47 14 21 30 2 2 2 1 10 16 19 23 28 38 2 1 1 1 1 1 35 39 7 12 15 20 1 1 1 1 1 1 3 1

  27. Rotaties 1 • Bij INSERTIONs en DELETIONs moeten we zorgen dat rood-zwart-eigenschap behouden blijft • Hoe? Weer met rotaties: • Links-rotatie en rechts-rotatie • Kunnen rood-zwart eigenschap verknoeien of herstellen • Behouden de zoekboom-eigenschappen • Links-rotatie: 17 14 14 17

  28. Invoegen • Voeg de knoop weer “gewoon” in op een blad • Kleur de nieuwe knoop rood • Nu een “fixup”: herstel de rood-zwart-eigenschappen • Dit hoeft alleen als: • Nieuwe knoop de wortel was (rode wortel; boom was leeg) • Ouder van de nieuwe knoop rood is

  29. Welke eigenschappen kunnen veranderen • Kijk eens naar de rood-zwart-eigenschappen: • Elke knoop is rood of zwart • De wortel is zwart • Kan veranderen, maar makkelijk op te lossen: kleur de wortel zwart • Bladeren (die NIL zijn) zijn zwart • Als een knoop rood is, dan zijn allebei zijn kinderen zwart • Kan veranderen, maar altijd op hooguit 1 plek • Eerst alleen voor de knoop die we invoegen en zijn ouder, maar later hoger in de boom • Voor elke knoop v geldt: elk pad van v naar een blad onder v heeft hetzelfde aantal zwarte knopen • Gaan we invariant houden

  30. Duw het probleem omhoog • Ons algoritme gebruikt als invariant • z is rood • Als p[z]de wortel is, dan is p[z]zwart • Als de rood-zwart-eigenschappen niet gelden, dan gelden ze op precies 1 punt niet, nl. bij z, en 1 van de volgende 2 gevallen geldt: • z is de wortel en z is rood OF • z is rood en p[z] is rood • Als z de wortel of kind van de wortel: los op door de wortel zwart te kleuren: klaar • Anders: verschillende gevallen

  31. 6 gevallen • 1 (en 2): rode oom • 3 – 6: zwarte oom • 3: linkerkind van een linkerkind • 4 (gespiegeld van 3): rechterkind van een rechterkind • 5: rechterkind van een linkerkind • 6 (gespiegeld van 5): linkerkind van een rechterkind

  32. Geval 1: vader is linkerkind en rechterkind van opa is rood Geval 2: vader is rechterkind en linkerkind van opa is rood Geval 1: rode oom 50 48 38 35 z

  33. Geval 1 (en 2): Herkleur en ga verder bij de opa • Kleur ouder en oom van z zwart • Kleur grootouder van z rood • Herhaal de stap met z = parent(parent(z)) z 50 50 62 62 38 38 35 35 z

  34. z is linkerkind Ouder van z is linkerkind Rechterkind van opa van z is zwart Geval 6 is gespiegeld: z is rechterkind Ouder van z is rechterkind Linkerkind van opa van z is zwart Geval 5: p[z] is een linkerkind, de oom van z is zwart, en z is een linkerkind 50 62 38 35 z

  35. Geval 6: rotatie en herkleuren • Doe rechterrotatie en herkleur 38 50 50 35 62 62 38 z 35 Je bent nu klaar:rood-zwart eigenschap is hersteld

  36. z is rechterkind Ouder van z is linkerkind Rechterkind van opa van z is zwart Geval 4 gespiegeld z is linkerkind Ouder van z is linkerkind Rechterkind van opa van z is zwart Geval 3: z is rechterkind, ouder van z is linkerkind, oom is zwart 50 71 28 35 z

  37. Geval 3: doe een linkerrotatieHiermee kom je in geval 5 Los op als in geval 5 (rechterrotatie en herkleur) en klaar 50 50 71 28 71 35 35 z 28 z

  38. 50 50 71 71 35 28 28 z 35 35 50 28 Dit heet:Dubbele rotatie 71

  39. Tijd van invoeging • De diepte van de boom is en blijft O(log n) • Eerst gaan we van de wortel naar een blad, en dan weer terug omhoog • Op elke positie doen we een constant aantal acties • O(log n) tijd

  40. Welke knopen worden beinvloed • Alleen knopen op het pad van de ingevoegde knoop naar de wortel, en af en toe een broer van zo’n knoop: • O(log n) knopen totaal

  41. Weglaten / deletion • Weglaten lijkt er een beetje op: iets meer gevallen • Weglaten heeft twee stappen: • Verwijderen van de knoop, ongeveer als in “gewone” zoekboom • Fixup, die rood-zwart eigenschappen herstelt, met herkleuringen en rotaties • Bij het weglaten kan gebeuren: • Een knoop a wordt verplaatst naar een andere plek waar een knoop b stond die weggelaten werd • Geef verplaatste knoop a de kleur van de weggelaten knoop b • Een blad wordt weggelaten • Een knoop met 1 kind wordt overgeslagen

  42. Wat gebeurt er bij weglaten • Verschillende gevallen: • Weggelaten knoop is blad: gewoon weglaten • Weggelaten knoop heeft 1 kind: overslaan • Weggelaten knoop heeft 2 kinderen: opvolger verplaatsen en die opvolger weglaten • Lemma: opvolger van knoop met 2 kinderen heeft geen linkerkind

  43. Blad wordt gewoon weggelaten Bij rood-zwart-boom: opletten als de weggelaten knoop zwart is! Weglaten van blad 15 15 8 8 17 17 7 29 7 10 29

  44. Weglaten van knoop met 1 kind • Knoop met 1 kind wordt “overgeslagen” als hij weggelaten wordt: zijn ouder wordt de ouder van zijn kind • Opletten als de weggelaten knoop zwart is: rood-zwart-eigenschappen kunnen verknoeid worden 15 15 17 z 8 17 7 29 7 29 z is niet de wortel

  45. Weglaten van wortel met 1 kind • We laten de wortel weg: kind wordt nieuwe wortel • Opletten als nieuwe wortel rood is… z is de wortel 42 15 15 8 17 8 17 7 29 7 29

  46. Twee operaties: Eerst een verplaatsing Dan overslaan van een knoop Opvolger van weggelaten knoop is rechterkind van weggelaten knoop x 20 y 8 37 7 39 y 20 37 8 39 7

  47. Nog steeds dezelfde twee operaties: Verplaatsen Weglaten van knoop met hooguit 1 kind Weggelaten knoop is niet opvolger van weggelaten knoop x 15 y 8 37 20 7 39 29 y 15 20 8 37 7 29 39

  48. Dus… • Weglaten is altijd: • Misschien een verplaatsing • Weglaten van een knoop met geen of 1 kind • Verplaatsen is makkelijk: geef de knoop de kleur van de knoop waar hij heen gaat! • Dus we moeten vooral kijken naar weglaten van een knoop met geen of 1 kind

  49. RB-Fixup-Delete • Alle gevallen: • We kunnen een blad weglaten • Rood of zwart • We kunnen een knoop met 1 kind “overslaan” • Rood of zwart • Bij het verplaatsen: knoop kan nieuwe kleur krijgen: • Kleur van de knoop die weggelaten was op wiens plek hij komt • Verplaatsen is makkelijk (evt. herkleuren) dus we kijken nog alleen naar weglaten / overslaan

  50. Rode knopen zijn makkelijk • De rood-zwart-boom eigenschappen blijven geldig als we een rood blad weggooien of overslaan • Elke knoop is rood of zwart • De wortel is zwart • Bladeren (die NIL zijn) zijn zwart • Als een knoop rood is, dan zijn allebei zijn kinderen zwart • Voor elke knoop v geldt: elk pad van v naar een blad onder v heeft hetzelfde aantal zwarte knopen • Dus we hoeven alleen een “fixup” te doen als we een zwarte knoop overslaan of weglaten

More Related