Datastructuren Onderwerp 10

Slides:



Advertisements
Verwante presentaties
Tevredenheid met behandelaar en behandeling.
Advertisements

BRIDGE Vervolgcursus Vervolg op starterscursus Bridgeclub Schiedam ‘59 info: Maandagavond: 19: – of
Sudoku puzzels: hoe los je ze op en hoe maak je ze?
Een getal met een komma noemen we een decimaalgetal.
De nieuwste uitspraken
Dyslexie Deze spreekbeurt van Eva, groep 6, gemaakt voor school, november Mijn spreekbeurt gaat over dyslexie.
Aflezen van analoge en digitale meetinstrumenten
Beter afspelen.
tattoo tatto + + +veelgestelde vragen over tatoeages+ + +
Naam: Mijn info : Klik op “Naam”. Vul je naam in. Doe hetzelfde met “sport” Hier kun je een foto / tekening Invoegen.
Programmeren met Alice
Techniek: Een Brug Te Ver
Datastructuren Quicksort
Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.
1 Hashtabellen Datastructuren. 2 Dit onderwerp Direct-access-tabellen Hashtabellen –Oplossen van botsingen met “ketens” (chaining) –Analyse –Oplossen.
Datastructuren Analyse van Algoritmen en O
Datastructuren Analyse van Algoritmen en O
om deze presentatie uit te voeren
Hoofdstuk 6: Controle structuren
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
1 Datastructuren Lijstjes (Stacks & Queues) Onderwerp 7.
Fibonacci & Friends Met dank aan Gerard Tel.
Datastructuren Zoekbomen
Zoekbomen: rotaties AVL-bomen Rood-zwart-bomen
1 Datastructuren Heapsort College 4. 2 Vandaag  Kort: ADT vs Datastructuur  Heaps en Heapsort  Tijd over: ondergrenzen voor sorteren; nog sneller sorteren.
1 Datastructuren Zoekbomen II Invoegen en weglaten.
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen (II) College 6.
Gebalanceerde bomen Zoekbomen: weglaten in rood-zwart-bomen.
Parallelle Algoritmen String matching. 1 Beter algoritme patroonanalyse Bottleneck in eenvoudig algoritme: WITNESS(j) (j = kandidaat in eerste i-blok)
1 Datastructuren Quicksort en andere sorteermethoden College 3.
1 Datastructuren Skiplists. 2 Skiplists  Vrij eenvoudige datastructuur  “Makkelijker” dan gebalanceerde bomen  Kunnen hetzelfde als gebalanceerde bomen.
1 Optuigen van datastructuren 2 Dynamische order statistics (2)
Optuigen van datastructuren
Datastructuren Sorteren: bubble, merge, quick
1 Datastructuren Heapsort (2e deel) College 5. 2 Vandaag  Heaps en Heapsort  (eind)  Nog sneller sorteren:  Ondergrenzen  Linair sorteren.
Datastructuren Sorteren, zoeken en tijdsanalyse
1x5= 2x5= 3x5= 4x5= 5x5= Om te controleren: Ga met je muiswijzer over de som tot het een handje wordt. Klik dan en je ziet het goede antwoord! 6x5= 7x5=
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 3.
Optuigen van datastructuren Datastructuren Onderwerp 11.
Datastructuren Sorteren, zoeken en tijdsanalyse
1 Datastructuren Een informele inleiding tot Skiplists Onderwerp 13.
Hashtabellen Datastructuren. 2 Dit onderwerp Direct-access-tabellen Hashtabellen –Oplossen van botsingen met “ketens” (chaining) –Analyse –Oplossen van.
OO Analyse in de praktijk OO Analyse in de praktijk V Enkele Design Patterns.
Interpreteren van data
Rekenen groep 4.
Kirti Zeijlmans MSc Rijksuniversiteit Groningen Voor meer informatie:
Centrummaten en Boxplot
HEEL VEEL SUCCES! HOI! LEUK DAT JE EEN SPREEKBEURT OVER
12 sept 2013 Bodegraven 1. 2  vooraf lezen: 1Kor.7:12 t/m 24  indeling 1Korinthe 7  1 t/m 9: over het huwelijk  10 t/m 16: over echtscheiding  16.
Slot 4Hc.
Intermezzo: Queries op zoekbomen Datastructuren. Queries: hoe op te lossen We hebben: – Een zoekboom (gewoon, rood-zwart, AVL,…) – Een vraag / querie.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten:
1 Hashtabellen Datastructuren. 2 Dit onderwerp Direct-access-tabellen (vorige keer) Hashtabellen –Oplossen van botsingen met “ketens” (chaining) Vorige.
1 Datastructuren Sorteren, zoeken en tijdsanalyse College 2.
1 Optuigen van datastructuren Zoeken op meerdere sleutels Dynamische order statistics (1)
1 Datastructuren Analyse van algorithmen (vervolg) Heapsort College 4.
Codetuts Academy Les 6 Module 2a Php Fundamentals 1.
Amorized Analysis en Union-Find Algoritmiek. 2 Vandaag Amortized analysis –Technieken voor tijdsanalyse van algoritmen Union-find datastructuur –Datastructuur.
Een werkvorm om actief en concreet tot participatie te komen
Minimum Opspannende Bomen Algoritmiek. 2 Inhoud Het minimum opspannende bomen probleem Een principe om een minimum opspannende boom te laten groeien Twee.
Doorzoeken van grafen Algoritmiek. Algoritmiek: Divide & Conquer2 Vandaag Methoden om door grafen te wandelen –Depth First Search –Breadth First Search.
Divide & Conquer: Verdeel en Heers vervolg Algoritmiek.
Doorzoeken van grafen Algoritmiek.
Datastructuren voor graafrepresentatie
Minimum Opspannende Bomen
Amorized Analysis en Union-Find
Kiezen met Kaarten.
3 vmbo-KGT Samenvatting Hoofdstuk 10
Kiezen met Kaarten.
Python – For loop + strings
Transcript van de presentatie:

Datastructuren Onderwerp 10 Rood-zwart-bomen Datastructuren Onderwerp 10

Vandaag Rood-zwart-bomen (“red black trees”) Waarom? Wat en hoe? Hoe snel?

Zoekbomen recap Zoekboom: implementatie van ADT met operaties: ZOEK-ELEMENT VOORGANGER OPVOLGER MINIMUM MAXIMUM INSERT DELETE n is steeds het aantal niet-NIL keys in de zoekboom Bij een zoekboom kan elk van deze in O(h) tijd, met h de hoogte van de boom Als we niks doen, kan de hoogte groot worden Slechtste geval: linked list, n hoog als n keys in boom Kunnen we de zoekboom zo implementeren dat de hoogte beperkt blijft??

Zoekbomen met logaritmische hoogte Veel vormen van zoekbomen zijn ontworpen zodat De hoogte van de boom O(log n) blijft Operaties in O(log n) tijd gedaan kunnen worden Een van de meest elegante en praktische vormen van een zoekboom zijn de rood-zwart-bomen (red-black trees) De hoogte blijft O(log n) in het slechtste geval Gebruikt rotaties en een kleur voor elke node Er zijn heel wat andere soorten bomen met zelfde eigenschappen: 2-3-4-bomen, 2-3-bomen, alpha-beta-bomen, AVL-bomen, B-bomen Ook veel gebruikt: skip-lists. Andere datastructuur met zelfde soort tijdseigenschappen (gelinkte lijst met aantal extra pointers die maken dat je soms stukken slim kan overslaan (skippen))

Rood-zwart-bomen Binaire zoekboom Iedere knoop heeft de volgende velden: Kleurbit: rood of 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.

Rood-zwart eigenschappen Een binaire zoekboom is een rood-zwart-boom, als de volgende rood-zwart eigenschappen gelden: 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 Idee 1: we doen de operaties op de boom zodat de rood-zwart eigenschappen blijven kloppen Hierbij gebruiken we rotaties (komt) Idee 2: als de rood-zwart eigenschappen kloppen dan heeft de boom diepte O(log n) Bewijs komt zometeen

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

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

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

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

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)

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

Een Lemma Lemma Laat 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. Bewijs Met inductie naar de (gewone) hoogte van x. Als x hoogte 0 heeft, dan is x een leaf (NIL-knoop); de boom gevormd door x en al zijn afstammelingen bevat alleen x en dus 0 niet-NIL knopen, wat precies 20-1 is. Stel x heeft hoogte h >0, en het lemma geldt voor alle knopen met hoogte < h. Dus: het lemma geldt voor de kinderen van x. Elk kind van x heeft zwarthoogte r-1 of r. De deelboom bevat: ³ 2r-1 – 1 niet-NIL knopen in de linkerdeelboom van x; ³ 2r-1 – 1 niet-NIL knopen in de rechterdeelboom van x; en x zelf (ook niet-NIL). Dus minstens 2r-1 -1 + 2r-1 -1 + 1 = 2r-1 niet-NIL knopen. QED

14 r 10 16 r r-1

Zwart-hoogte en hoogte van boom Lemma De wortel van een rood-zwartboom met n interne knopen heeft zwarthoogte hooguit lg (n+1). Want n ³ 2zh(root) -1 Stelling De hoogte van een rood-zwartboom is hooguit 2 lg(n+1). Bewijs: tenminste de helft van alle knopen op een pad van de wortel naar een blad zijn zwart, want er zijn geen twee rode knopen na elkaar op zo’n pad. Dus de hoogte is maximaal twee keer de zwart-hoogte van de wortel. QED Gevolg: operaties Tree-Search, Minimum, Maximum, Successor, Predecessor kosten O(lg n) tijd als we een rood-zwart-boom hebben.

Rotaties 1 Bij INSERTIONs en DELETIONs moeten we zorgen dat rood-zwart-eigenschap behouden blijft Hoe? Rotaties! Twee soorten: links-rotatie en rechts-rotatie Kunnen rood-zwart eigenschap verknoeien of herstellen Behouden de zoekboom-eigenschappen Links-rotatie: 17 14 14 17

Links- en rechts-rotatie 17 14 14 17 17 14 14 17

17 17 21 10 14 21 19 23 10 16 19 23 7 14 20 7 12 15 20 3 16 12 3 15

Eigenschap van rotaties Rood-zwart-eigenschappen kunnen veranderen voor de geroteerde knopen en alle knopen op pad van geroteerde knopen naar wortel 17 14 14 17

Invoegen van een nieuwe node Als we een nieuwe knoop met key z willen invoegen: Eerst voegen we z toe, net als in zoekboom Daarna doen we een stap RB-INSERT-FIXUP(T,z): Herstelt de rood-zwart eigenschap door rotaties

Pseudocode RB-INSERT(T,z) Neem aan dat we een knoop-object z hebben met een key-waarde key[z]. Ongeveer net als bij gewone zoekbomen voegen we in, maar Gebruik van nil[T] Nieuwe knoop krijgt kleur rood We roepen RB-INSERT-FIXUP aan y = nil[T]; x = nil[T]; while x ¹ nil[T] do y = x; if key[z] < key[x] then x = left[x] else x = right[x] p[z] = y; if (y == nil[T]) then root[T]= z; else if key[z] < key[y] then left[y] = z else right[y] = z left[z] = nil[T]; right[z] = nil[T]; color[z] = rood; RB-INSERT-FIXUP(T,z)

RB-INSERT(T,z) x wordt een blad waar key[z] zou passen; y is de ouder van x Zet z op de plek van x en zet alle pointers goed Kleur z rood Roep RB-INSERT-FIXUP aan y = nil[T]; x = nil[T]; while x ¹ nil[T] do y = x; if key[z] < key[x] then x = left[x] else x = right[x] p[z] = y; if (y == nil[T]) then root[T]= z; else if key[z] < key[y] then left[y] = z else right[y] = z left[z] = nil[T]; right[z] = nil[T]; color[z] = rood; RB-INSERT-FIXUP(T,z)

Hoe doen we de fixup? Kijk eens naar de rood-zwart-eigenschappen: 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 Alleen eigenschappen 2 en 4 kunnen worden geschonden. Eigenschap 2 is makkelijk: als de ingevoegde knoop de wortel is, dan is die rood, maar moet zwart zijn. Dus, kleur de wortel zwart. Dat verknoeit niets. Eigenschap 4 kan verknoeid worden als we z onder een rode knoop hangen. We kunnen niet zomaar z dan zwart kleuren, wan dat zou eigenschap 5 schaden…

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 Merk op: deze geldt initieel (met z de ingevoegde knoop) In het begin geldt dit voor de ingevoegde knoop z (onderaan de boom). Door rotaties en herkleuringen schuiven we het probleem omhoog, tot we bij de wortel zijn of er geen probleem meer is… Hoe we precies dit doen: gevalsonderscheid!

Geval 0: z is de wortel Kleur z zwart Klaar! Als z niet de wortel is: z is rood, de ouder van z is rood (en dus is vanwege invariant is de ouder van z ook niet de wortel)

38 p[z] p[z] 38 35 z 45 z Als z niet de wortel is: Als z niet de wortel is: z is rood, de ouder van z is rood (en dus is vanwege invariant is de ouder van z ook niet de wortel) 6 gevallen 38 p[z] p[z] 38 35 z 45 z

6 gevallen 1 en 1b: de oom van z is rood 2 en 2b: “recht”: z is linkerkind van linkerkind, of rechterkind van rechterkind, en de oom van z is zwart 3 en 3b: “zigzag”: z is linkerkind van rechterkind, of rechterkind van linkerkind, en de oom van z is zwart

Geval 1: p[z] is linkerkind, en right[p[p[z]] is rood In geval 1 is p[z] het linkerkind van zijn ouder: left[p[p[z]] == p[z] En is het rechterkind van de ouder van de ouder van z rood Naamgeving: right[p[p[z]] is de oom van z 50 38 48 z 35

Geval 1: p[z] is linkerkind, en right[p[p[z]] is rood Kleur ouder en oom van z zwart Kleur grootouder van z rood z wordt grootouder z = p[p[z]] z 50 50 38 62 38 62 z 35 35 Check de invarianten!

Geval 1B: p[z] is rechterkind, en left[p[p[z]] is rood Net als geval 1, maar gespiegeld z 50 50 38 62 38 62 z 35 35

Wat is het geval? We krijgen nog deze gevallen: Geval 2: p[z] is een linkerkind, de oom van z is zwart, en z is een linkerkind Geval 2B: p[z] is een rechterkind, de oom van z is zwart, en z is een rechterkind Gespiegeld aan geval 2 Geval 3: p[z] is een linkerkind, de oom van z is zwart, en z is een rechterkind Geval 3b: p[z] is een rechterkind, de oom van z is zwart, en z is een linkerkind Gespiegeld aan geval 3 Ik behandel eerst geval 3 (uit het boek), en dan pas geval 2.

Geval 3: p[z] is een linkerkind, de oom van z is zwart, en z is een linkerkind Ziet er zo uit Lijkt op geval 1, maar nu is de oom van z zwart, en we eisen dat z een linkerkind is (maakte niet uit bij geval 1) 50 38 62 z 35

Geval 3: rotatie en herkleuren Doe rechterrotatie en herkleur 38 50 50 35 38 62 62 z 35 … en klaar!

Geval 2: p[z] is een linkerkind, de oom van z is zwart, en z is een rechterkind We doen nu een linkerrotatie en komen daarmee in geval 3 50 71 28 35 z

Linkerrotatie: dit beinvloedt alleen z en zijn ouder Linkerrotatie: dit beinvloedt alleen z en zijn ouder. Hierna zijn we in geval 3 beland en lossen we het op als in geval 3! 50 50 71 28 71 35 35 z 28 z

Recap Geval 1 en 1B: kleur de ouder en oom van z zwart, en de grootouder van z rood; z wordt zijn grootouder Geval 2: doe een linkerrotatie en je komt in geval 3 Geval 2B: doe een rechterrotatie en je komt in geval 3B (niet getoond) Geval 3: doe een rechterrotatie en kleur de oude ouder van z zwart en de oude grootouder van z rood. Nu gelden alle rood-zwart-boom-eigenschappen weer. Geval 3B: doe een linkerrotatie en kleur de oude ouder van z zwart en de oude grootouder van z rood. Nu gelden alle rood-zwart-boom-eigenschappen weer. (Niet getoond.)

Pseudocode for RB-INSERT-FIXUP(T,z) while color[p[z]] == rood do if (p[z] == left[p[p[z]]) then y = right[p[p[z]]]; if (color[y] == rood) {geval 1} then color[p[z]] = zwart; color[y] = zwart; color[p[p[z]] = rood; z = p[p[z]]; else if (z == right[p[z]]) {geval 2} then z = p[z]; LEFT-ROTATE(T,z); color[p[z]] = black; {geval 3} color[p[p[z]] = red; RIGHT-ROTATE(T,p[p[z]]); else zelfde code als voor het if-geval met links en rechts verwisseld

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

Opmerking Andere soorten zoekbomen met O(log n) tijd voor insertions werken ook met rotaties, maar hebben een ander mechanisme om te zien waar en wanneer je moet roteren

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

RB-DELETE(T,z) Pseudocode: zie boek We doen eigenlijk hetzelfde als de oorspronkelijke delete, maar nil-pointers Kleur van knoop die verplaatst wordt Na afloop een FIXUP: herstel de rood-zwart eigenschappen

RB-Fixup-Delete Herinner van “gewone” delete de gevallen: We kunnen een blad weglaten Rood of zwart We kunnen een knoop met 1 kind “overslaan” Bij het verplaatsen: knoop kan nieuwe kleur krijgen: Kleur van de knoop die weggelaten was op wiens plek hij komt

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

Gevallen Weglaten van een zwarte knoop Wortel (heeft dan 1 kind) Oplossen door nieuwe wortel zwart te maken (als ie ‘t niet al was) Knoop met 1 kind middenin, kind is zwart Oplossen met rotaties Knoop met 1 kind middenin, kind is rood Kleur kind zwart Blad

Geval 1 Geval 1: de wortel heeft 1 kind, en we laten de wortel weg Mogelijk probleem: conditie 2: wortel kan rood wortel Oplossing: kleur de wortel zwart. Condities gelden nu 42 15 15 15

Geval 2: Overslaan van zwarte knoop met 1 rood kind Als we een zwarte knoop x met 1 rood kind overslaan, dan doen we: Kleur het kind zwart Controleer dat we weer een rood-zwart-boom hebben aan de eisen In feite is het rode kind weggelaten 15 8 17 7 29 15 17 7 7 29

Geval 2B: Overslaan van zwarte knoop met 1 zwart kind Als we een zwarte knoop x met 1 zwart kind overslaan, dan was de boom geen rood-zwart-boom! In het voorbeeld: linksaf heeft “8” een grotere zwartdiepte dan rechtsaf… Dus, dit geval doet zich niet voor 15 8 17 7 29 ? 15 17 7 7 29

Geval 3: Weglaten van zwart blad 15 Alleen eigenschap 5 is verknoeid: voorouders van weggelaten knoop x hebben verschillend aantal zwarte knopen op paden naar bladeren Oplossen door omhoog te lopen en door rotaties e.e.a. op te lossen Preciezer: 1 knoop en al zijn voorouders hebben eigenschap 5 niet vervuld 8 17 7 10 29 15 8 17 7 29

Samenvatting probleem Kan zowel bij weglaten van blad als bij overslaan van knoop zich voordoen … en links en rechts kunnen anders zitten z i-1 zwarte knopen i zwarte knopen x y Deze namen blijf ik gebruiken

Weer verschillende gevallen gevallen x is een knoop die te weinig zwart heeft naar beneden, vergeleken met z’n broer De broer van x is rood De broer van x is zwart en heeft twee zwarte kinderen De broer van x is zwart, heeft een zwart kind en een rood kind, en het rode kind “zit aan de kant van x” De broer van x is zwart, heeft een zwart kind en een rood kind, en het zwarte kind “zit aan de kant van x” OF: De broer van x is zwart en heeft twee rode kinderen NB: nil-bladeren tellen hier ook als zwarte kinderen

Geval 1: de broer van x is rood Roteer en herkleur om ervoor te zorgen dat de broer van x zwart is Nu kom je in geval 2-4: de broer van x is zwart z x i i-1 y b a i i y Getallen: aantal zwarte knopen op bladpaden, inclusief z b i x i-1 a i

Geval 2: zwarte broer die twee zwarte kinderen heeft Stel x heeft zwarte broer, en die heeft twee zwarte kinderen Oplossing: kleur de broer van x rood Nu heb je het probleem 1 omhoog geschoven in de boom Het probleem kan zich mogelijk nog bij z voordoen (niet altijd) Herhaal de analyse met z=x i z i x i-1 y b a i-1 i-1 i z x i-1 i-1 y b a i-1 i-1

Geval 3: broer heeft dichtbij rood kind en ver zwart kind Stel x is linkerkind van z, broer y van x is rechterkind Stel linkerkind a van y is rood Stel rechterkind b van y is zwart Nu roteren we y en a en herkleuren Zelfde soort geval met links en rechts gespiegeld Je zit nu in geval 4: de wortel van de paarse boom is zwart want hing onder rood i z i x i-1 y b a i-1 i-1 i z x i i-1 a y i-1 b

Geval 4: broer heeft veraf rood kind Stel x is linkerkind van z, broer y van x is rechterkind Stel rechterkind b van y is rood Roteer Controleer verder 1 hoger in de boom Zelfde soort geval met links en rechts gespiegeld i z i x i-1 y b a i-1 i-1 i y i z b i x a i-1 i-1

Algemeen Door herkleuren en roteren schuif je probleem steeds 1 hoger de boom in Probleem: knoop met verschillend aantal zwarte knopen op paden via linkerkind en via rechterkind Als we bij de wortel zijn, ben je klaar Soms ben je eerder klaar O(1) werk per niveau van de boom, dus O(log n) totaal

Stelling Operaties: zoeken, invoegen, weglaten, minimum, opvolger, voorganger, kunnen allemaal in O(log n) tijd op rood-zwart-bomen

Conclusies Technieken: Diepte boom blijft O(log n) Invariant houden van eigenschappen van de boom Gevalsanalyse Probleem (tijdelijke overtreding van invariante eigenschappen) duwen naar wortel, of duwen naar blad toe en zo oplossen Diepte boom blijft O(log n) Dus operaties gaan in O(diepte) = O(log n)