Gebalanceerde bomen Zoekbomen: weglaten in rood-zwart-bomen.

Slides:



Advertisements
Verwante presentaties
Tevredenheid met behandelaar en behandeling.
Advertisements

BRIDGE Vervolgcursus Vervolg op starterscursus Bridgeclub Schiedam ‘59 info: Maandagavond: 19: – of
Digitaal wedstrijd formulier Presentatie scheidsrechters Versie sept 2013.
Sudoku puzzels: hoe los je ze op en hoe maak je ze?
Een getal met een komma noemen we een decimaalgetal.
Digitaal wedstrijd formulier Presentatie scheidsrechters.
Herkenning? Rot voelen? Leegte opvullen?
Welke eis stel je aan de ondergrond als je aan uitwendige hartmassage begint Dat deze hard is.
28 juni 2009 Paëllanamiddag 1 Paëllanamiddag 28 juni 2009 Voorbereiding vrijdagavond (Loopt automatisch - 7 seconden)
Les 2 : MODULE 1 STARRE LICHAMEN
Dyslexie Deze spreekbeurt van Eva, groep 6, gemaakt voor school, november Mijn spreekbeurt gaat over dyslexie.
Aflezen van analoge en digitale meetinstrumenten
Werkwoorden d t dt.
Beter afspelen.
WAAROM? Onderzoek naar het meest geschikte traject voor de verlenging tot in Sint-Niklaas van het bestaande fietspad naast de Stekense Vaart en de Molenbeek.
“ff Anders”.  Het thema van dit jaar is “ff Anders” 2.
Programmeren met Alice
Ronde (Sport & Spel) Quiz Night !
1 Hashtabellen Datastructuren. 2 Dit onderwerp Direct-access-tabellen Hashtabellen –Oplossen van botsingen met “ketens” (chaining) –Analyse –Oplossen.
Sinterklaas is verdwenen nergens te vinden nergens te zien Nam hij de benen, is hij hem geknepen, weggewaaid misschien?
Datastructuren Analyse van Algoritmen en O
Mijn kind, Ik ben de Roos van Saron Hooglied 2,1 Zang : Betty Middler
om deze presentatie uit te voeren
BZ voor de Klas 3 juni 2010.
Hoofdstuk 6: Controle structuren
Datastructuren Onderwerp 10
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
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.
De grafiek van een lineair verband is ALTIJD een rechte lijn.
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
1 Datastructuren Heapsort (2e deel) College 5. 2 Vandaag  Heaps en Heapsort  (eind)  Nog sneller sorteren:  Ondergrenzen  Linair sorteren.
Pasen & Pinksteren op één dag!
ribwis1 Toegepaste wiskunde Lesweek 01 – Deel B
Statistiekbegrippen en hoe je ze berekent!!
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.
ECHT ONGELOOFLIJK. Lees alle getallen. langzaam en rij voor rij
Interpreteren van data
17/08/2014 | pag. 1 Fractale en Wavelet Beeldcompressie Les 5.
Fractale en Wavelet Beeldcompressie
Basisvaardigheden: Metingen en diagrammen
Met handen en voeten geloven 1
Rekenen groep 4.
10 raadseltjes om jouw logica te testen !!!
Les 3: Verkeer TOETS.
Centrummaten en Boxplot
Lucas 15: 11 En Hij zeide: Iemand had twee zonen
1 Zie ook identiteit.pdf willen denkenvoelen 5 Zie ook identiteit.pdf.
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.
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:
Torens van Hanoi ● Uitgevonden door Franse Wiskundige Edouard Lucas in ● Beschreven in zijn wiskundig “spelletjesboek” Récréations Mathématiques.
1 Optuigen van datastructuren Zoeken op meerdere sleutels Dynamische order statistics (1)
Variabelen. Wat zijn variabelen? In een programmeertaal zijn er “dingen” nodig die ervoor zorgen dat het programma informatie voor korte of langere tijd.
Minimum Opspannende Bomen Algoritmiek. 2 Inhoud Het minimum opspannende bomen probleem Een principe om een minimum opspannende boom te laten groeien Twee.
Minimum Opspannende Bomen
3 vmbo-KGT Samenvatting Hoofdstuk 10
Tellen met kaarten.
Transcript van de presentatie:

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 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

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 …

Rotatie Idee: verander de zoekboom lokaal zodat Eigenschappen van zoekboom behouden blijft Hij beter in balans komt

Root(T) Door rotatie kan je de boom meer in balans brengen

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

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) Stelling Een AVL-boom met n knopen heeft diepte O(log n). We zagen: 2 log n+2

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

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)

Stel we voegen 14 toe Een voorbeeld

14 is toegevoegd Herbereken hoogte

Herbereken hoogte hoogte wordt 2 15 is in balans

Een stap omhoog Herbereken hoogte

Opnieuw balanceren Herbereken diepte hoogte is 3 16 is NIET in balans

Opnieuw balanceren is NIET in balans We gaan roteren

Na rotatie (hoogtes tijdelijk fout)

Herbereken hoogtes voor geroteerde knopen

Een stap omhoog: 13 in balans en correcte hoogte Klaar

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: 1.Elke knoop is rood of zwart 2.De wortel is zwart 3.Bladeren (die NIL zijn) zijn zwart 4.Als een knoop rood is, dan zijn allebei zijn kinderen zwart 5.Voor elke knoop v geldt: elk pad van v naar een blad onder v heeft hetzelfde aantal zwarte knopen

NIL Een voorbeeld van een rood-zwart-boom NIL

We tekenen de boom zonder de NIL-knopen

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

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) Lemma Laat x een knoop zijn. Als x zwarthoogte r heeft, dan bevat de deelboom, gevormd door x en al zijn afstammelingen tenminste 2 r -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).

zh(x)

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:

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

Welke eigenschappen kunnen veranderen Kijk eens naar de rood-zwart-eigenschappen: 1.Elke knoop is rood of zwart 2.De wortel is zwart Kan veranderen, maar makkelijk op te lossen: kleur de wortel zwart 3.Bladeren (die NIL zijn) zijn zwart 4.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 5.Voor elke knoop v geldt: elk pad van v naar een blad onder v heeft hetzelfde aantal zwarte knopen Gaan we invariant houden

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

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

Geval 1: rode oom Geval 1: vader is linkerkind en rechterkind van opa is rood Geval 2: vader is rechterkind en linkerkind van opa is rood z

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 z

Geval 5: p[z] is een linkerkind, de oom van z is zwart, en z is een linkerkind 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 z

Geval 6: rotatie en herkleuren Doe rechterrotatie en herkleur z Je bent nu klaar: rood-zwart eigenschap is hersteld

Geval 3: z is rechterkind, ouder van z is linkerkind, oom is zwart 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 z 71

z z 71 Geval 3: doe een linkerrotatie Hiermee kom je in geval 5 Los op als in geval 5 (rechterrotatie en herkleur) en klaar

Dit heet: Dubbele rotatie z

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

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

Weglaten / deletion Weglaten lijkt er een beetje op: iets meer gevallen Weglaten heeft twee stappen: 1.Verwijderen van de knoop, ongeveer als in “gewone” zoekboom 2.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

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

Weglaten van blad Blad wordt gewoon weggelaten Bij rood-zwart-boom: opletten als de weggelaten knoop zwart is!

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 z is niet de wortel z

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

Opvolger van weggelaten knoop is rechterkind van weggelaten knoop Twee operaties: Eerst een verplaatsing Dan overslaan van een knoop x y y

Weggelaten knoop is niet opvolger van weggelaten knoop Nog steeds dezelfde twee operaties: Verplaatsen Weglaten van knoop met hooguit 1 kind x y y

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

RB-DELETE(T,z) Pseudocode is gegeven in het boek Eerst gewoon weglaten Dan een FIXUP: herstel de rood-zwart eigenschappen

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

Rode knopen zijn makkelijk De rood-zwart-boom eigenschappen blijven geldig als we een rood blad weggooien of overslaan 1.Elke knoop is rood of zwart 2.De wortel is zwart 3.Bladeren (die NIL zijn) zijn zwart 4.Als een knoop rood is, dan zijn allebei zijn kinderen zwart 5.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 Oplossen met rotaties

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

Geval 2: Overslaan van zwarte knoop met 1 rood kind Als we een zwarte knoop x met 1 rood kind y overslaan, dan doen we: Kleur het kind y zwart Controleer dat we weer een rood-zwart-boom hebben aan de eisen Elk pad dat langs y gaat ziet evenveel zwarte knopen als eerst

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 ?

Geval 3: Weglaten van zwart blad Lastiger! 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

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

Weer verschillende gevallen gevallen x is een knoop die te weinig zwart heeft naar beneden, vergeleken met z’n broer 1.De broer van x is rood 2.De broer van x is zwart en heeft twee zwarte kinderen 3.De broer van x is zwart, heeft een zwart kind en een rood kind, en het rode kind “zit aan de kant van x” 4.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

z, a en b moeten zwart zijn… 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 y a b y bz x a i-1 i i i i i Getallen: aantal zwarte knopen op bladpaden, inclusief

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 z x y a b i i-1 i z x y a b i

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 z x y a b i i-1 i z x y a b i i

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 z x y a b i i-1 i y z b xa i i i

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 (en de rest), kunnen allemaal in O(log n) tijd op rood-zwart-bomen

Conclusies Technieken: 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)