Lars Vidar Magnusson Kapittel 13 Rød-Svarte (Red-Black) trær Rotasjoner Insetting Sletting

Like dokumenter
Lars Vidar Magnusson

INF2220: Forelesning 2

INF2220: Forelesning 2. Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7)

INF2220: Forelesning 2

Lars Vidar Magnusson

Grunnleggende Datastrukturer

Balanserte binære søketrær

Definisjon: Et sortert tre

Definisjon av binært søketre

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.4

Selv-balanserende søketrær

Heapsort. Lars Vidar Magnusson Kapittel 6 Heaps Heapsort Prioritetskøer

Løsningsforslag for Obligatorisk Oppgave 3. Algoritmer og Datastrukturer ITF20006

INF2220: Gruppe me 2. Mathias Lohne Høsten 2017

Trær. Består av sammenkoblede noder Hver node har 0 eller flere barne-noder. Må være asyklisk. Et tre med n noder har n-1 kanter.

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

Definisjon. I et binært tre har hver node enten 0, 1 eller 2 barn

Grunnleggende Grafalgoritmer III

Notater til INF2220 Eksamen

Fra Kap.10 Binære søketre (BS-tre) Sist oppdatert Definere en abstrakt datastruktur binært søketre. Vise hvordan binær søketre kan brukes

Heap og prioritetskø. Marjory the Trash Heap fra Fraggle Rock

UNIVERSITETET I OSLO

Minimum Spenntrær - Kruskal & Prim

Grunnleggende Grafalgoritmer II

INF Algoritmer og datastrukturer

Uke 5 Disjunkte mengder

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre:

EKSAMENSOPPGAVE. INF-1101 Datastrukturer og algoritmer. Adm.bygget, rom K1.04 og B154 Ingen

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF2220: Time 4 - Heap, Huffmann

INF Algoritmer og datastrukturer

Enkle datastrukturer. Lars Greger Nordland Hagen. Introduksjon til øvingsopplegget og gjennomgang av python

Trær. En datastruktur (og abstrakt datatype ADT)

Et eksempel: Åtterspillet

Flerveis søketrær og B-trær

Dagens plan: INF Algoritmer og datastrukturer. Repetisjon: Binære søketrær. Repetisjon: Binære søketrær

Binær heap. En heap er et komplett binært tre:

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

IN Algoritmer og datastrukturer

Hashtabeller. Lars Vidar Magnusson Kapittel 11 Direkte adressering Hashtabeller Chaining Åpen-adressering

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

PG 4200 Algoritmer og datastrukturer Innlevering 2

Disjunkte mengder ADT

Datastrukturer. Stakker (Stacks) Hva er en datastruktur? Fordeler / Ulemper. Generelt om Datastrukturer. Stakker (Stacks) Elementære Datastrukturer

Object [] element. array. int [] tall

Binære trær: Noen algoritmer og anvendelser

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

MAT1030 Diskret Matematikk

Prioritetskøer. Prioritetskøer. Binære heaper (vanligst) Prioritetskøer

Alg. Dat. Øvingsforelesning 3. Grafer, BFS, DFS og hashing. Børge Rødsjø

Grådige algoritmer. Lars Vidar Magnusson Kapittel 16. Aktivitetvelgingsproblemet Huffmankoder

Korteste Vei II. Lars Vidar Magnusson Kapittel 24 Bellman-Ford algoritmen Dijkstra algoritmen

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

Et eksempel: Åtterspillet

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

INF Algoritmer og datastrukturer

EKSAMEN Løsningsforslag. med forbehold om bugs :-)

Dagens plan: INF Algoritmer og datastrukturer. Eksempel. Binære Relasjoner

Ekstra ark kan legges ved om nødvendig, men det er meningen at svarene skal få plass i rutene på oppgavearkene. Lange svar teller ikke positivt.

Dynamisk programmering

Divide-and-Conquer. Lars Vidar Magnusson

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 00HINDB / 00HINEA ( 2DA / 2DB / 2EA ) TID:

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen

Dynamisk programmering

Prioritetskøer. Binære heaper Venstrevridde heaper (Leftist) Binomialheaper Fibonacciheaper

Svarforslag til ukeoppgaver til INF 4130

Forelesning 23. Grafteori. Dag Normann april Oppsummering. Oppsummering. Oppsummering. Digresjon: Firefarveproblemet

TMA4140 Diskret Matematikk Høst 2016

MAT1030 Diskret matematikk

Oppsummering. MAT1030 Diskret matematikk. Oppsummering. Oppsummering. Forelesning 23: Grafteori

Algoritmer og datastrukturer Kapittel 9 Delkapittel 9.2

UNIVERSITETET I OSLO

INF1020 Algoritmer og datastrukturer. Dagens plan

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00

Forelesning 25. MAT1030 Diskret Matematikk. Litt repetisjon. Litt repetisjon. Forelesning 25: Trær. Dag Normann

Korteste Vei I. Lars Vidar Magnusson Kapittel 24 Hvordan finne korteste vei Egenskaper ved korteste vei

Oppgave 1 LØSNINGSFORSLAG. Eksamen i INF desember Betrakt følgende vektede, urettede graf:

Grunnleggende Grafalgoritmer

MAT1030 Diskret Matematikk

MAT1030 Diskret matematikk

Innledning. MAT1030 Diskret matematikk. Kapittel 11. Kapittel 11. Forelesning 33: Repetisjon

... Dagens plan. Prioritetskø ADT

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Kap.12. Flervegssøketre. Studerer 2-3 og 2-4 trær. Sist oppdatert

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

Quicksort. Lars Vidar Magnusson Kapittel 7 Quicksort Randomisert Quicksort Analyse av Quicksort

Balanserte søketrær. AVL-trær. AVL-trær. AVL-trær høyde AVL AVL. AVL-trær (Adelson-Velskii og Landis, 1962) Splay-trær (Sleator og Tarjan, 1985)

Forelesning 33. Repetisjon. Dag Normann mai Innledning. Kapittel 11

MAT1030 Forelesning 25

Eksamen iin115 og IN110, 15. mai 1997 Side 2 Oppgave 1 Trær 55 % Vi skal i denne oppgaven se på en form for søkestrukturer som er spesielt godt egnet

EKSAMEN med løsningsforslag

Kap 9 Tre Sist oppdatert 15.03

Oppsummering. MAT1030 Diskret matematikk. Oppsummering. Oppsummering. Eksempel

MAT1030 Diskret Matematikk

INF2220: Time 12 - Sortering

MAT1030 Forelesning 24

Transkript:

Rød-Svarte Trær Lars Vidar Magnusson 21.2.2014 Kapittel 13 Rød-Svarte (Red-Black) trær Rotasjoner Insetting Sletting

Rød-Svarte Trær Rød-Svarte trær (red-black trees) er en variasjon binære søketrær som til enhver tid sørger for balanse i søketreet. Forsikrer at høyden på søketreet er O(log n). Dette forsikrer også at operasjonene vil ta O(log n). Vi legger til et ekstra attributt color i hver node som angir fargen til noden. En node er enten rød eller svart. Disse fargekodene brukes for å holde orden på strukturen til søketreet.

Representasjon av Rød-Svarte Trær Vi tar i bruk en enkelt sentinel T.nil for å representere nil i søketreet. T.nil.color er svart Alle bladnoder er tomme og svarte (de peker til T.nil). Forelderen til rotnoden peker også til T.nil.

Eksempel på et Rød-Svart Tre Figuren under viser et eksempel på et rød-svart tre uten bruk av en sentinel.

Eksempel på et Rød-Svart Tre Figuren under viser det samme eksempelet på et rød-svart tre hvor alle tomme pekere har blitt erstattet med en peker til sentinel-noden T. nil.

Eksempel på et Rød-Svart Tre Figuren under viser det samme eksempelet på et rød-svart tre, men nå uten alle hjelpenoder. Det er slik vi tegner rød-svarte trær, så lenge detaljene ikke av en eller annen grunn er påkrevd.

Egenskaper ved Rød-Svarte Trær Rød-svarte trær har følgende egenskaper: Hver node er enten rød eller svart. Rotnoden er svart. Hver eneste bladnode (T.nil) er svart. Hvis en node er rød, så er begge barna svarte (aldri to røde på rad i en enkel sti fra roten til en bladnode). For alle noder så inneholder hver eneste sti til bladnoder samme antall svarte noder. Disse egenskapene sørger for balanse i søketreet.

Høyden til et Rød-Svart Tre Rød-svarte trær har to typer høyder. Høyden til en node er antall kanter i lengste enkle sti til en bladnode (normal høyde) Svart-høyden til en node bh(x) er antall svarte noder (inkludert T.nil men ikke x) på stien fra x til en bladnode. Utifra den femte egenskapen ved rød-svart trær er bh(x) veldefinert i.e. alle stier gir samme antall svarte noder.

Høyden til et Rød-Svart Tre En node med høyde h har svart-høyde h/2. Følger av egenskap 4 ved rød-svarte trær siden minst halvparten av nodene må være svarte. Deltreet med rotnode x inneholder 2 bh(x) 1 interne noder (ikke bladnoder). Kan bevises med matematisk induksjon ved å utnytte det faktum at hvert barn har svart-høyde på enten bh(x) eller bh(x) 1 om barnet er henholdsvis rødt eller svart. Dette følger av egenskap 5 ved rød-svarte trær. Hvis vi setter disse to sammen får vi en øvre grense på høyden til et rød-svart tre med n interne noder på 2 log(n + 1). Dette kan bevises ved å løse ulikheten n 2 h/2 1 med hensyn på h.

Operasjoner på Rød-Svarte Trær Alle operasjonene vi presentere forrige uke som ikke modifiserer treet har kjøretide på O(log n). Dette gjelder for Minimum, Maximum, Successor, Predecessor og Search. Innsetting og sletting er ikke så enkelt siden vi må sørge for at egenskapene til rød-svarte trær blir ivaretatt Hvilken farge skal nye noder få? Hvis den er rød kan egenskap 4 brytes, eller også 2 hvis den nye noden er rotnoden. Hvis den er svart kan egenskap 5 brytes Hvordan påvirker fargen til en node egenskapene når en node slettes? Hvis den er svart kan egenskap 4 og 5 brytes, eller til og med 2 hvis noden var rotnoden og barnet som blir satt inn er rødt. Hvis den er rød blir egenskapene fortsatt ivaretatt.

Rotasjoner En rotasjon er operasjonen som benyttes for å restrukturere treet slik at det er balanse i søketreet. Forandrer på trestrukturen ved å endre pekerne. Påvirker ikke egenskapen til binære søketrær. Vi har både venstre- og høyre-rotasjoner. Operasjonene er symmetriske. Kjøretiden for begge rotasjonene er O(1). Benyttes av andre typer trær også (AVL, splay-trær).

Hvordan Rotasjoner Fungerer Figuren under viser hvordan rotasjoner fungerer. Operasjonen tar en referanse til søketreet og en intern node. Venstrerotasjoner gjør y sitt venstre barn til x sitt høyre Høyrerotasjoner gjør x sitt høyre barn til y sitt venstre

Left-Rotate Algoritmen Pseudokoden for Left-Rotate er listet under. Right-Rotate algoritmen er lik, men left og right er byttet om.

Eksempel Rotasjon Figuren under viser et eksempel på hvordan en rotasjon fungerer.

RB-Insert Algoritmen RB-Insert algoritmen brukes for å sette inn et nytt element i et rød-svart tre. Den er i hovedsak lik Tree-Insert algoritmen men skiller seg ut på to punkter RB-Insert setter den nye noden til å være rød Vi kaller en hjelpefunksjon RB-Insert-Fixup for å sørge for at de de rød-svarte egenskapene ivaretas. Ved å sette den nye noden til å være rød kan enten egenskap 2 eller 4 være brutt.

RB-Insert Pseudokode Pseudokoden til RB-Insert er listet under.

RB-Insert-Fixup Algoritmen Hjelpefunksjonen RB-Insert-Fixup brukes for å restrukturere treet slik at de rød-svarte egenskapene gjelder etter en insetting. Algoritmen løser konflikter med den 2 egenskapen ved å alltid sette rotnoden til å være svart Algoritmen løser konflikter med den 4 egenskapen ved rød-svart trær ved å se på på noden z sin onkel y (z.p sin bror ). Vi skiller på 6 ulike tilfeller (tre symmetriske tilfeller som avhenger om onkelen er høyre eller venstre barn). y er rød y er svart og z er høyre barn y er svart og z er venstre barn

RB-Insert-Fixup - Tilfelle 1 Vi ser først på tilfellet hvor y er rød. z.p.p (z sin besteforelder) må være svart, siden z og z.p begge er røde og det kan ikke være andre konflikter i treet. Vi setter både z.p og y til å være svart. Dette løser konflikten med den 4 egenskapen, men det kan også introdusere konflikter med den 5 egenskapen. Vi setter z.p.p til å være rød. Dette løser konflikter med den 5 egenskapen. Vi setter z til å være z.p.p før vi gå videre med neste iterasjon.

RB-Insert-Fixup - Tilfelle 1 Figuren under viser begge utgavene av tilfelle 1 (hvor y er rød). a viser utgaven hvor z er høyre barn b viser utgaven hvor z er venstre barn

RB-Insert-Fixup - Tilfelle 2 og 3 Det andre tilfellet forekommer når y er svart og z er høyre barn. Vi utfører en venstrerotasjon rundt z. p. Nå er z venstre barn, og både z og z.p er røde. Det tredje tilfellet forekommer når y er svart og z er venstre barn. Vi gjørz.p svart og z.p.p rød. Vi utfører en høyrerotasjon rundt z.p.p Dette løser konflikten med den 4 rød-svarte egenskapen. Nå er z.p er nå svart. Dette avbryter algoritmen. Vi utfører aldri mere enn to rotasjoner.

RB-Insert-Fixup - Tilfelle 2 og 3 Figuren under viser hvordan vi går fra tilfelle 2, til tilfelle 3, til et gyldig rød-svart tre.

Psedukode for RB-Insert-Fixup Algoritmen Pseudokoden til RB-Insert-Fixup algoritmen er listet under.

Analyse av RB-Insert Kjøretiden av RB-Insert er O(log n) frem til kallet til RB-Insert-Fixup. Kjøretiden til RB-Insert-Fixup kan sammenfattes med følgende punkter Hver iterasjon tar O(1) Hver iterasjon tar oss opp to nivåer Vi har O(log n) nivåer Vi har derfor en kjøretid på O(log n) Den totale kjøretiden av RB-Insert er derfor O(log n).

RB-Delete Algoritmen RB-Delete algoritmen benyttes til å slette et element fra et rød-svart tre. Algoritmen er vesentlig lengre enn Tree-Delete, men alle stegene i Tree-Delete finnes også i RB-Delete. Transplant har blitt byttet ut med en spesialisert hjelpefunksjon RB-Transplant y er en ekstra node referanse som enten peker til noden som skal slettes (hvis noden ikke har flere enn et barn) eller til noden som skal ta plassen til noden som skal slettes Vi lagrer orginalfargen til y for å kunne sjekke om noen av egenskapene har blitt brutt. x peker til noden som tar y sin plass (enten y sitt eneste barn eller T.nil). x.p blir oppdatert enten i RB-Transplant eller satt til å peke på y.

RB-Delete Pseudokode Pseudokoden til RB-Delete er listet under.

RB-Transplant Pseudokode Pseudokoden til RB-Transplant er listet under. Kjøretiden til RB-Transplant er O(1).

Konflikter Introdusert av RB-Delete RB-Delete kan introdusere konflikter. Disse forekommer bare når orginalfargen til y er svart. Hvis y er rotnoden og x er rød så har vi brutt egenskap 2 Hvis både x og x.p er røde har vi brutt egenskap 4 Vi har også brutt egenskap 5 siden vi har tatt bort en svart node fra stien til alle forfedre med y har nå en mindre svart node. Vi løser opp konfliktene med et kall til RB-Delete-Fixup.

RB-Delete-Fixup Algoritmen Konfliktene introdusert av RB-Delete blir fikset av RB-Delete-Fixup algoritmen. Den siste konflikten introdusert ved at vi tar bort en svart node kan løses ved at man lar x få en ekstra svart. En konseptuell endring i.e. ingen endring i koden. Vi antar bare en ekstra svart på alle nodene vi vurderer rød = rød-svart og svart = svart-svart Vi lar den ekstra svarte gå oppover i treet til x peker til en rød-svart node = vi gjør noden svart x peker til rotnoden = vi fjerner ekstra svart, eller vi utfører passende rotasjoner og omfarginger, og returnerer Vi har 8 tilfeller, men 4 av de er symmetriske med de resterende 4.

RB-Delete-Fixup - Tilfelle 1 Tilfelle 1 forekommer når x sin bror w er rød. w må ha to svarte barn. Vi gjør w svart og x.p rød Vi utfører en venstrerotasjon på x. p. Det nye barnet til x må være svart siden det var et barna til w før rotasjonen. Dette tar oss direkte til tilfelle 2, 3, eller 4

RB-Delete-Fixup - Tilfelle 2 Tilfelle 2 forekommer når x sin bror w er svart og begge barna til w er svarte. Merk at den lysegrå har en ukjent farge Ta bort ekstra svart på x og w. Dette gjør x svart og w rød. Flytt ekstra svart til x.p Kjør neste iterasjon med x.p som x. Hvis vi kom fra tilfelle 1 vil dette føre til at løkken avbrytes og x blir satt til svart

RB-Delete-Fixup - Tilfelle 3 Tilfelle 3 forekommer når x sin bror w er svart og det høyre barnet til w er svart. Gjør w rød og w sitt høyre barn svart. Utfør en høyrerotasjon på w. Den nye broren w er svart og har et rødt barn. Dette tar oss til tilfelle 4.

RB-Delete-Fixup - Tilfelle 4 Tilfelle 4 forekommer når x sin bror w er svart og det høyre barnet til w er rødt. Merk at vi nå har to noder med ukjent farge Gjør fargen til w til c (den ukjente fargen c til x.p) Gjør x.p svart og w sitt høyre barn svart Utfør en venstrerotasjon i x. p Fjern ekstra svart på x som vil gjøre x svart Vi er nå ferdig og kan sette x til rotnoden for å avbryte løkken.

RB-Delete-Fixup Pseudokode Pseudokoden til RB-Delete-Fixup er listet under.

Analyse av RB-Delete Kjøretiden til RB-Delete er O(log n) frem til kallet til RB-Delete-Fixup. Kjøretiden til RB-Delete-Fixup kan summeres med Det er bare tilfelle 2 som fører til ytterligere iterasjoner Går oppover nivå for nivå O(log n) nivåer Vi utfører totalt sett maksimum 3 rotasjoner Totalt sett er kjøretiden til RB-Delete O(log n).