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

Like dokumenter
INF2220: Forelesning 2

INF2220: Forelesning 2

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

Balanserte binære søketrær

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

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

INF2220: Time 4 - Heap, Huffmann

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

Definisjon av binært søketre

Selv-balanserende søketrær

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

Definisjon: Et sortert tre

Notater til INF2220 Eksamen

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

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.

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

Et eksempel: Åtterspillet

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

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

Binære trær: Noen algoritmer og anvendelser

INF Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

INF2220: Time 12 - Sortering

Lars Vidar Magnusson

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

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

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

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

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

IN Algoritmer og datastrukturer

INF2220: Forelesning 1

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

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

INF2220: Forelesning 1

INF2220: Forelesning 3

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.4

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Kap 9 Tre Sist oppdatert 15.03

UNIVERSITETET I OSLO

Hva er en algoritme? INF HØSTEN 2006 INF1020. Kursansvarlige Ragnar Normann E-post: Dagens tema

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

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

PG4200 Algoritmer og datastrukturer Forelesning 7

Binære Søketre. Egenskap. Egenskap : Grafisk. Egenskap : Kjøretid. Egenskap : Kjøretid. Egenskap : Oppsumering. Binære Søketre

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

INF Algoritmer og datastrukturer. Hva er INF2220? Algoritmer og datastrukturer

Søkeproblemet. Gitt en datastruktur med n elementer: Finnes et bestemt element (eller en bestemt verdi) x lagret i datastrukturen eller ikke?

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

Datastrukturer for rask søking

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

Eksempel: Uttrykkstrær I uttrykkstrær inneholder bladnodene operander (konstanter, variable,... ), mens de interne nodene inneholder operatorer.

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

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

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

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

Algoritmer og datastrukturer Kapittel 9 Delkapittel 9.2

Uke 5 Disjunkte mengder

EKSAMEN med løsningsforslag

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

Et eksempel: Åtterspillet

Object [] element. array. int [] tall

Disjunkte mengder ADT

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

INF Algoritmer og datastrukturer

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

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

Eksamen i IN 110, 18. mai 1993 Side 2 Del 1 (15%) Vi skal se på prioritetskøer av heltall, der vi hele tiden er interessert i å få ut den minste verdi

INF1010 siste begreper før oblig 2

INF1010 Binære søketrær ++

INF2220: Algoritmer og datastrukturer Pensumsammendrag. Mathias Lohne, Kris an Monsen Haug og Vegard S kbakke

ALGORITMER OG DATASTRUKTURER

Algoritmer og Datastrukturer

PQ: HEAP. Heap. Er disse heap er? Hvordan implementere heap:

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

MAT1030 Diskret matematikk

Oppsummering. MAT1030 Diskret matematikk. Oppsummering. Oppsummering. Eksempel

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

Rekursiv programmering

Algoritmer og datastrukturer Pensumsammendrag i INF2220. Mathias Lohne, Kris an Monsen Haug, Vegard S kbakke

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.

UNIVERSITETET I OSLO

Løsningsforslag til eksamen i PG4200 Algoritmer og datastrukturer 10. desember 2014

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Kontinuasjonseksamen i fag SIF8010 Algoritmer og Datastrukturer Torsdag 9. August 2001, kl

Liste som abstrakt konsept/datatype

PG 4200 Algoritmer og datastrukturer Innlevering 2

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00

INF2220: Time 8 og 9 - Kompleksitet, beregnbarhet og kombinatorisk søk

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

Et eksempel: Åtterspillet

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Dynamisk programmering

Dynamisk programmering Undervises av Stein Krogdahl

KONTINUASJONSEKSAMEN

Transkript:

INF0: Gruppe me Mathias Lohne Høsten 0 1 Rød-svarte trær Vanlige binære søketrær blir fort veldig ubalanserte. røv å sett inn 1,,, 4, 5,, 7,... (i den rekkefølgen) i et binært søketre. Da vil vi i praksis ha en lenket liste. Da er også kjøretiden for å søke, sette inn og slette i verste fall O(n), i stedet for O(log n) som er det vi vanligvis har for søketrær, og som er det vi ønsker. Vi trenger derfor trær som vil balansere seg selv. Vi skal se på rød-svarte trær, men det finnes også andre typer (som VL-trær) Rødsvarte trær er binære søketrær med noen spesielle strukturkrav. Kravene er designet for å motkjempe skjevhet (som illustrert i figur??), og dermed forbedre kjøretid. Vi deler nodene opp i to kategorier, røde og svarte. Vi følger noen bestemte regler på hvordan vi skal farge nodene, og fargen på nodene avgjør som vi må benytte oss av rotasjon eller ikke (se ). Definisjon. Et rød-svart tre er et binært søketre med noen spesielle tilleggsregler: i Roten er svart. ii Hvis en node er rød, må barna være svarte. iii Enhver vei fra en node til en null-peker må inneholde samme antall svarte noder. Fargen til en node er ikke statisk, den kan endre seg. Disse reglene sikrer at høyden maksimalt er log (n + 1) (bevis for dette finnes på Wikipedia). Inse ng Vi zoomer inn på en del av treet og jobber kun med de nodene som har noe å si for innsetting. er noden vi skal sette inn, er foreldernoden, U er onkelnoden (søsken av forelder), G er besteforeldernoden. Når vi setter inn ei node i et rød-svart tre er den nye noda alltid rød. Deretter må vi se på fargene til, U og G for å finne ut om vi må ta noen videre steg: 1

Figure 1.1: Situasjon for innsetting G U Teorem. Innsetting i rød-svarte trær Hvis er svart er alt OK, og vi er ferdig Hvis er rød må vi ta noen steg for å opprettholde krav ii og iii: Hvis U også er rød: Farg og U svarte og farg G rød. Dette kan føre til trøbbel videre oppover i treet, så vi må fortsette oppover å rette opp feil. Hvis U er svart, utfør en rotasjon, og utfør nødvendige fargeendringer: * venstre barn av : Zig mhp. * venstre barn av : Zig-zag mhp. Hvis rota på noe tidspunkt blir farget rød kan man bare farge den svart igjen. Sle ng Sletting fra rød-svarte trær handler til syvende og sist om å slette løvnoder. Skal vi slette en indre node kan vi gå en plass til høyre, og deretter gå til venstre helt til vi er i bunnen av treet, og swappe de to nodene. Deretter kan vi slette (det som nå er) løvnoden. Når vi gjør dette kan det hende vi bryter med noen av kravene i definisjon??. Vi må derfor bruke samme type strategi som for innsetting for å rette opp feil. Sletting er noe mer komplisert enn innsetting. Se seksjon 1.. i læreboka for gjennomgang av en del situasjoner med figurer og forklaringer. Tidsanalyse Siden høyden til et rød-svart tre maksimalt er log (n + 1) har vi worst case tid O(log n). Selv om vi risikerer å måtte gjøre rotasjoner er innsetningstiden også O(log n).

Rotasjon Zig For å skjønne zig-rotasjon ser vi på en figur: Figure.1: Zig-rotasjon mhp En zig-rotasjon vil beholde egenskapene til et binært søketre siden alle nodene i er mindre enn og, alle nodene i er større enn og mindre enn, og alle nodene i er større enn både og. Vi ser at alle høyre barn av også er høyre barn av etter rotasjonen, etc. Vi har også noe som heter zig-zig-rotasjon, som er å utføre en zig-rotasjon to ganger. Zig-zag Igjen ser vi på en figur: Figure.: Zig-zag-rotasjon mhp : G D G D Som i tilfellet med zig-rotasjon ser vi at egenskapene til et binært søketre er bevart.

-trær -trær er konstruert for å effektivisere antall disklesninger, og gir mening å bruke hvis vi har et tre som er så stort at det må lagres på gammeldagse spinnedisker, og ikke i RM. Vi lagrer dataene i blokker, og leser en og en blokk av gangen. lle dataene er lagret i løvnodene, mens de indre nodene brukes for søking. En vanlig måte å implementere -trær på er å ha så mye av toppen i RM som mulig, og lagre resten på disk. -trær er ikke binære, dvs at de kan ha flere enn barn. Definisjon. La M angi antall mulige nøkler i hver indre node, og L angi maksimalt antall dataelementer i hver løvnode. -trær er søketrær der følgende kriterier er oppfylt: i lle dataene er lagret i løvnodene ii Interne noder lagrer inntil M 1 nøkler for søking: nøkkel i angir den minste verdien i subtre i + 1. iii Roten er enten en løvnode, eller har mellom og M barn. iv lle andre indre noder har mellom M/ og M barn. v lle løvnoder har samme dybde. vi lle løvnoder har mellom L/ og L dataelementer Innse ng Når vi skal sette inn et element i et -tre finner vi plassen elementet skal på, og setter det der. Hvis løvnoden vi setter elementet inn i er full må vi splitte noden i to like store deler. Vi må da oppdatere nøklene i foreldrenoden. Hvis ikke har plass til en ekstra nøkkel må vi splitte den også, og oppdatere nøklene i foreldrenoden til. Slik fortsetter vi oppover til vi får en node som har plass til en ekstra nøkkel. Den eneste måten et -tre kan øke høyden på er at rota splittes i to, og at vi lager en ny rot. Eksempel. Sett inn 1 og 4 i følgende -tre (M = og L = 4): Vi starter med å sette inn 1. Vi ser først på rota: (; -). 1 er mindre enn, så vi går til første barn. Så sammenligner vi med (1; -). 1 er sørre enn 1, og mindre enn uendelig (- symboliserer minste verdi i tredje barn, men siden det barnet ikke eksisterer tenker vi på verdier som ). Vi går derfor til andre barn. Der ser vi at vi kan sette inn 1 uten problemer. Vi skal nå sette inn 4. 4 er større enn så vi går til andre barn. Igjen er 4 større enn så vi går til andre barn igjen. Her ser vi at hvis vi legger til 4 i bunn av noden (, 7,, 41) blir størrelsen lik 5, altså større enn N. Vi må splitte noden. Når vi splitter en node med et odde antall elementer er det ikke helt klart som vi skal ta med oss størsteparten, eller la størsteparten være igjen. I dette tilfellet vil vi få en node med og en node med elementer. Vi kan selv velge om den nye noden skal ha 4

; - 1; - ; - 1 9 0 7 41 eller elementer, men vi må være konsekvente. I dette tilfellet lar vi den nye noden ha elementer. Vi oppdaterer foreldrenoden. Siden den har to barn fra før og M = går det fint, vi trenger ikke splitte videre oppover. Resultatet etter innsetting ser slik ut: ; - 1; - ; 41 1 1 9 0 7 41 4 Sle ng Hvis vi skal fjerne et element fra et -tre søker vi opp elementet, tar det vekk, og hvis mengden elementer i noden blir mindre enn grensen satt i def..vi slår vi sammen to noder. Den eneste måten -trær kan minke i høyde på er om alle barna til rota blir slått sammen til én node (vi fjerner da rota). Eksempel. Fjern 41 fra følgende -tre: Vi ser at 41 er mellom og, så vi går til andre barn. Deretter ser vi at 41 er større enn og større enn eller lik 41. Vi går derfor til tredje barn og fjerner 41. Vi ser at da vi noden kun ha ett element, og vi slår den sammen med noden før. Resultatet etter fjerning blir 5

; - 1; - ; 41 1 1 9 0 7 41 4 ; - 1; - ; - 1 1 9 0 7 4 Tidsanalyse Følgende teorem angir kompliksteten til de ulike operasjonene på et -tre: Teorem. Å søke etter, sette inn og fjerne elementer fra et -tre tar, både i beste og verste fall, O(log n) tid.