Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.4



Like dokumenter
Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Balanserte binære søketrær

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

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

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

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

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

INF2220: Forelesning 2

Algoritmer og datastrukturer Assignment 11 Side 1 av 5

Algoritmer og datastrukturer Kapittel 9 Delkapittel 9.2

INF2220: Forelesning 2

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

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

Algoritmer og datastrukturer Løsningsforslag

Notater til INF2220 Eksamen

Definisjon av binært søketre

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

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

G høgskolen i oslo. Emne: Algoritmer og datastrukturer. Emnekode: 80131A. Faglig veileder: UlfUttersrud. Gruppe(r) : Dato:

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

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.

Algoritmer og datastrukturer Eksamen

UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

Definisjon: Et sortert tre

Lars Vidar Magnusson

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

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

Lars Vidar Magnusson

EKSAMEN med løsningsforslag

UNIVERSITETET I OSLO

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

Algoritmer og datastrukturer Eksamen 22. februar 2011

Object [] element. array. int [] tall

INF Algoritmer og datastrukturer

EKSAMEN. Algoritmer og datastrukturer

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

Diagnosekart for oblig 2, INF3/4130 h07

Algoritmer og datastrukturer Eksamen

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

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

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

INF2220: Time 4 - Heap, Huffmann

Selv-balanserende søketrær

Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.1

Oppgave 1. Oppgave 2. Høgskolen i Østfold Avdeling for informasjonsteknologi

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

Oppsummering. MAT1030 Diskret matematikk. Oppsummering. Oppsummering. Eksempel

INF Algoritmer og datastrukturer

Korteste vei i en vektet graf uten negative kanter

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

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

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3

Sist forelesning snakket vi i hovedsak om trær med rot, og om praktisk bruk av slike. rot. barn

Dagens tema. INF Algoritmer og datastrukturer. Binærtrær. Generelle trær

MAT1030 Diskret matematikk

INF Algoritmer og datastrukturer

Emnekode: I-Dato: I ~ Antall oppgaver: I I Aiie -sk:i=rftlige - bme trykte og håndskrevne, samt alle typer

INF Algoritmer og datastrukturer

Et eksempel: Åtterspillet

Et eksempel: Åtterspillet

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

INF Algoritmer og datastrukturer

Sist gang (1) IT1101 Informatikk basisfag. Sist gang (2) Oppgave: Lenket liste (fysisk) Hva menes med konseptuelt og fysisk i forb med datastrukturer?

Side 1 av 11

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

Algoritmer og Datastrukturer

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

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

INF Algoritmer og datastrukturer

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

INF1020 Algoritmer og datastrukturer. Dagens plan

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

Algoritmer og datastrukturer Løsningsforslag

IN Algoritmer og datastrukturer

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Kapittel 2 - Delkapittel 2.1

Fagnr: SO 131 A. Ant. vedlegg: 1 (2 sider)

Fagnr: A. Ant. vedlegg: 1 (2 sider)

Algoritmer og datastrukturer Løsningsforslag

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)

Algoritmer og Datastrukturer IAI 21899

... Dagens plan. Prioritetskø ADT

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

Fagnr: A. Ant. vedlegg: 1 (2 sider)

Uke 5 Disjunkte mengder

Rekursiv programmering

Perspektiv. Kapittel 14 - Perspektiv D modell... 3 Siktepunkt og kameraposisjon... 3 Linjeskjult til dekor... 5 Med og uten skygge...

UNIVERSITETET I OSLO

Hvordan lage et sammensatt buevindu med sprosser?

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

Algoritmer og Datastrukturer

2009 Thomas Haugland Rudfoss. PowerPoint 2007 En rask introduksjon

TESTBATTERI REKRUTTERINGSLAG RG 2016

INF Algoritmer og datastrukturer

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

~ta11 oppgaver: 4. Nle skriftlige hjelpemidler-både trykte og håndskrevne, er tillatt

Disjunkte mengder ADT

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

Et eksempel: Åtterspillet

Transkript:

Delkapittel 9.4 Splay-trær Side 1 av 7 Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.4 9.4 Splay-trær 9.4.1 Splay-rotasjoner Et splay-tre er et sortert binætre der treet restruktureres på en bestemt måte etter hver operasjon (d.v. innsetting, søking eller sletting). Idéen er at restruktureringene skal sørge for at verdier som etterspørres ofte ligger høyt oppe (nær roten) i treet og at verdier som etterspørres sjelden ligger langt nede (langt fra roten) i treet. En restrukturering gjennomføres som en serie rotasjoner og kalles en "splay". Det er flg. seks typer rotasjoner som er aktuelle: Node<T> høyrezigzig(node<t> p) // to enkle høyrerotasjoner Node<T> q = p.venstre; p.venstre = q.høyre; q.høyre = p; p = q.venstre; q.venstre = p.høyre; p.høyre = q; return p; Node<T> venstrezigzig(node<t> p) // to enkle venstrerotasjoner Node<T> q = p.høyre; p.høyre = q.venstre;

Delkapittel 9.4 Splay-trær Side 2 av 7 q.venstre = p; p = q.høyre; q.høyre = p.venstre; p.venstre = q; return p; Node<T> høyrezigzag(node<t> p) // dobbel høyrerotasjon Node<T> q = p.venstre; Node<T> r = q.høyre; q.høyre = r.venstre; r.venstre = q; p.venstre = r.høyre; r.høyre = p; return r; Node<T> venstrezigzag(node<t> p) // dobbel venstrerotasjon Node<T> q = p.høyre; Node<T> r = q.venstre; q.venstre = r.høyre; r.høyre = q; p.høyre = r.venstre; r.venstre = p; return r;

Delkapittel 9.4 Splay-trær Side 3 av 7 Node<T> høyrezig(node<t> p) // enkel høyrerotasjon Node<T> q = p.venstre; p.venstre = q.høyre; q.høyre = p; return q; Node<T> venstrezig(node<t> p) // enkel venstrerotasjon Node<T> q = p.høyre; p.høyre = q.venstre; q.venstre = p; return q; Det å utføre en splay på en node X betyr at X skal roteres oppover i treet og bli en ny rot. En gitt node X vil ha en forelder F og en besteforelder B. Det utføres så en zigzig eller en zigzag avhengig av mønsteret for X, F og B. Dermed har X kommet to nivåer oppover (nærmere roten) i treet, og en ny zigzig eller zigzag kan utføres på X. Til slutt vil X enten bli ny rot eller et barn til den gamle roten. I siste tilfellet avsluttes det med en zig slik at X blir ny rot. 9.4.2 Når skal det utføres en splay? Innsetting Det er ikke tillatt med duplikater i et splay-tre. En ny verdi settes inn på vanlig sortert plass i treet, og deretter splayes noden X med den nye verdien. Hvis dette var treets første verdi, så skal det ikke gjøres noe mer. Hvis vi forsøker å sette inn en verdi som allerede finnes i treet, så skal noden X som inneholder denne verdien splayes. Søking Hvis den søkte verdien ligger i noden X så skal X splayes. Hvis den søkte verdien ikke finnes i treet, så splayes den siste noden X vi passerer på veien nedover under søkingen.

Delkapittel 9.4 Splay-trær Side 4 av 7 Sletting Hvis verdien som skal slettes ikke finnes i treet, så splayes den siste noden X vi passerer på veien nedover under søkingen etter verdien som skal slettes. Hvis verdien som skal slettes finnes i treet, så skal en node slettes og da ikke nødvendigvis den noden der verdien ligger. I noen tilfeller erstatter vi verdien med verdien fra en annen node og sletter denne andre noden. Men splay-reglen er hele tiden at det er foreldrenoden til noden som slettes, som skal splayes. La Y være noden som inneholder den verdien vi skal slette fra treet. Vi deler det opp i to ulike situasjoner: 1. Y har ikke et venstre barn: La X være forelder til Y. Vi sletter så noden Y ved at høyre barn til Y erstatter Y og så splayes X. Hvis Y ikke har et høyre barn (d.v.s. Y er en bladnode) så sletter vi bare Y, men fortsatt skal vi splaye X. Hvis X (eller eventuelt Y) er rotnoden så skal det ikke gjøres noen splaying. 2. Y har et venstre barn: La Z være den noden som kommer rett foran Y i sorteringen. Det er den som ligger lengst til høyre i det venstre subtreet til Y. La X være forelderen til Z. (Obs. X og Y blir samme node hvis det venstre barnet til Y ikke har et høyre barn). Verdien i Y erstattes med verdien i Z, Z slettes og X splayes. 9.4.3 Et eksempel Verdiene 7, 12, 3, 15, 9, 10, 8, 17, 12 skal fortløpende settes inn i et splay-tre. På tegningene nedenfor er hver av verdiene satt inn og alle rotasjonene (zig-er, zigzig-er og zigzag-er) som trengs i hver splay er tegnet inn. Det er laget i form av en "tegneserie" der en pil viser til neste "rute" i tegneserien. En ny verdi settes inn på rett sortert plass. Det er markert ved at den nye noden har svart ring. Deretter splayes noden til topps. Den svarte ringen beholdes inntil noden har blitt rotnode - da blir ringen rød og på tegningen er det markert med ok! Vi starter med å sette inn 7, 12 og 3: Fra og med verdien 15 blir det litt mer arbeid ved innsettingen:

Delkapittel 9.4 Splay-trær Side 5 av 7

Delkapittel 9.4 Splay-trær Side 6 av 7 Til slutt skal vi sette inn 12. Da ser vi at 12 finnes fra før. Dermed skal noden som inneholder 12 splayes: Vi skal søke etter verdien 2, men den er ikke i treet. Da skal den siste noden vi passerer på veien nedover under letingen etter 2 splayes. D.v.s. at her skal 3 splayes: Vi skal slette verdien 12. I sletting er det to hovedtilfeller - 1) noden som skal slettes mangler et venstre barn og 2) noden har et venstre barn. I dette tilfellet ser vi at noden som inneholder 12 har et venstre barn. La noden som inneholder 12 hete Y. Den noden som kommer rett foran Y i sorteringen kaller vi Z - her blir det noden som inneholder 10. Foreldren til Z kaller vi X - her blir det noden med verdien 8. Reglen sier nå at verdien i Y erstattes med verdien i Z, at Z slettes og at X splayes!

Delkapittel 9.4 Splay-trær Side 7 av 7 En animasjon av splay-trær Denne animasjonen laget av Vladimir Yanovsky, Israel Inst. of Techn. kan brukes til å teste ens forståelse av operasjonene i et splay-tre der "bottom up" teknikken brukes.