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

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

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

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)

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

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

Balanserte binære søketrær

INF2220: Forelesning 3

Definisjon av binært søketre

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

INF2220: Forelesning 3

Inf 1020 Algoritmer og datastrukturer

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

INF2220: Forelesning 3. Map og hashing Abstrakte datatyper (kapittel 3.1) Map (kapittel 4.8) Hashing (kapittel 5)

Notater til INF2220 Eksamen

Definisjon: Et sortert tre

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.

Lars Vidar Magnusson

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

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

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

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

Stack. En enkel, lineær datastruktur

Selv-balanserende søketrær

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

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

Binære trær: Noen algoritmer og anvendelser

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

Hashing. INF Algoritmer og datastrukturer HASHING. Hashtabeller

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.4

Et eksempel: Åtterspillet

INF2220: Forelesning 1

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

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

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

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

INF Algoritmer og datastrukturer

Uke 5 Disjunkte mengder

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

Liste som abstrakt konsept/datatype

Lars Vidar Magnusson

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

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

INF Algoritmer og datastrukturer

INF2220: Forelesning 1

IN Algoritmer og datastrukturer

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

EKSAMEN med løsningsforslag

PG4200 Algoritmer og datastrukturer Forelesning 7

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

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Kap 9 Tre Sist oppdatert 15.03

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

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

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

Grunnleggende Datastrukturer

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

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

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

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

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

INF1010 siste begreper før oblig 2

INF Algoritmer og datastrukturer

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

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

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

INF1010 Binære søketrær ++

Løsnings forslag i java In115, Våren 1996

INF2220: Time 4 - Heap, Huffmann

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Algoritmer og Datastrukturer

Object [] element. array. int [] tall

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

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

Algoritmer og Datastrukturer

Generelle trær BINÆRTRÆR. Binærtrær

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

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

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

EKSAMEN. Algoritmer og datastrukturer

Disjunkte mengder ADT

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

Algoritmer og Datastrukturer

Dagens tema INF1010 INF1010 INF1010 INF1010

Algoritmer og datastrukturer Kapittel 9 Delkapittel 9.2

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

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

KONTINUASJONSEKSAMEN

Oppsummering. MAT1030 Diskret matematikk. Oppsummering. Oppsummering. Eksempel

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

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

INF1020 Algoritmer og datastrukturer. Dagens plan

MAT1030 Diskret matematikk

Transkript:

Repetisjon: Binære søketrær Dagens plan: Rød-svarte trær (kap. 12.2) B-trær (kap. 4.7) bstrakte datatyper (kap. 3.1) takker (kap. 3.3) For enhver node i et binært søketre gjelder: lle verdiene i venstre subtre er mindre enn verdien i noden selv. lle verdiene i høyre subtre er større enn verdien i noden selv. Eksempel på perfekt balansert tre: 4 8 12 2 6 10 14 1 3 5 7 9 11 13 15 rk 1 av 28 Høyde: log 2 (N) Forelesning 12.9.2005 Forelesning 12.9.2005 rk 2 av 28 Rød-svarte trær Et rød-svart tre er et binært søketre der hver node er farget enten rød eller svart slik at: Roten er svart. Hvis en node er rød, må barna være svarte. Enhver vei fra en node til en null-peker må inneholde samme antall svarte noder. Disse fargeleggingsreglene sikrer at høyden på et rød-svart tre er maksimalt 2 log 2 (N + 1)! Oppgave Farg nodene i følgende tre slik at det blir et rød-svart tre: 9 4 36 1 25 49 16 ett inn tallet 64 på riktig plass og med riktig farge. Forsøk så å sette inn tallet 81. Forelesning 12.9.2005 rk 3 av 28 Forelesning 12.9.2005 rk 4 av 28

Rotasjoner på binære søketrær jelder generelt, ikke bare for rød-svarte trær! Zig-zag rotasjon: Zig rotasjon: B B1 B2 B B1 + symmetrisk tilfelle... B2 + symmetrisk tilfelle... Forelesning 12.9.2005 rk 5 av 28 Forelesning 12.9.2005 rk 6 av 28 Innsetting i rød-svart tre 1. jør innsetting som i vanlig binært søketre, der den nye noden farges rød. 2. La og være forelder og besteforelder til. 3. Hvis er svart: lt ok, innsetting ferdig. 4. Hvis er rød: (a) Hvis og er begge venstre eller begge høyre barn: jør zig rotasjon med nødvendige fargeendringer. (b) Hvis er venstre og er høyre barn eller motsatt: jør zig-zag rotasjon med nødvendige fargeendringer. (c) ett til å være den nye roten i det roterte subtreet. (d) Hvis er roten i selve treet: Farg denne svart. Ellers: jenta fra steg 2. B-trær En annen type søketrær. Brukes først og fremst når ikke hele treet får plass i internminnet. Har stor bredde (hver node har mange barn) og er balansert. De øverste nivåene (iallfall rotnoden) lagres i internminnet, resten på disk. Brukes særlig i databasesystemer. Forelesning 12.9.2005 rk 7 av 28 Forelesning 12.9.2005 rk 8 av 28

Definisjon: B-trær av orden M 1. lle data (eller pekere til data) er lagret i bladnodene. 2. Interne noder lagrer inntil M 1 nøkler for bruk i søking; nøkkel i angir den minste verdien i subtre i + 1. 3. Roten er enten en bladnode, eller har mellom 2 og M barn. 4. lle andre interne noder har mellom M/2 og M barn. 5. lle bladnoder har samme dybde og har mellom L/2 og L dataelementer (eller datapekere), der L er en konstant felles for alle bladnoder. Merk: Lærebokens (og våre) B-trær er ellers i litteraturen kjent som B + -trær. Tradisjonelle B-trær har data(pekere) i alle noder. Eksempel B-tre av orden 3 (også kalt et 2-3 tre): 16 22 41 8,11,12 16,17 22,23,31 41,52 Her er M = 3 og L = 3. Vi forenkler tegningene litt: 58 58,59,61 8,11,12 16,17 22,23,31 41,52 58,59,61 Forelesning 12.9.2005 rk 9 av 28 Forelesning 12.9.2005 rk 10 av 28 Innsetting av element x øking etter element x 1. tart i roten. 2. å lenge vi ikke er i en bladnode: La nøkkel-verdiene bestemme hvilket barn vi skal gå til. 3. Let etter x i bladnoden. 1. Let etter riktig bladnode for x (som for søking). 2. Dersom det er plass, setter vi inn x og oppdaterer eventuelt nøkkel-verdiene langs veien vi gikk. Eksempel: ett inn 18 i treet i eksempelet over. 16:- 16:- 8,11,12 16,17, 18 22,23,31 41,52 58,59,61 Forelesning 12.9.2005 rk 11 av 28 Forelesning 12.9.2005 rk 12 av 28

3. Dersom bladnoden er full, deler vi den i to og fordeler de L + 1 nøklene jevnt på de to nye bladnodene. Eksempel: ett inn 1 i treet på forrige foil. 4. Dersom splittingen medfører at foreldernoden får for mange barn, splitter vi den også, gir den nye noden til besteforelderen, osv. Eksempel: ett inn 19 i treet på forrige foil. 16:22 11:16 11: - 18:- 1,8 11,12 16,17,18 22,23,31 41,52 58,59,61 1,8 11,12 16,17 18,19 22,23,31 41,52 58,59,61 Forelesning 12.9.2005 rk 13 av 28 Forelesning 12.9.2005 rk 14 av 28 5. Dette kan medføre at vi til slutt må splitte roten i to. (Hvis roten får M + 1 barn.) Da lager vi en ny rot med den gamle roten og den nye noden som barn. Merk: Dette er den eneste måten et B-tre kan vokse i høyden på! Eksempel: ett inn 28 i treet på forrige foil. letting: eksempel Fjern først 17, deretter 23 fra følgende tre: 22:41 16: - 28:- 59:- 16:- 41:- 8,11,12 16,17 22,23 28,31 41,52, 58 59,61, 70 11: - 18:- 28:- 58:- 1,8 11,12 16,17 18,19 22,23 28,31 41,52 58,59,61 Forelesning 12.9.2005 rk 15 av 28 Forelesning 12.9.2005 rk 16 av 28

letting av element x 1. Finn riktig bladnode B for x ved søking. 2. Dersom B har minst L/2 + 1 elementer, kan vi enkelt slette x. 3. Hvis ikke, må vi kombinere B med en av nabosøsknene: (a) Dersom venstre (høyre) søsken har L/2 + 1 elementer eller mer, flytter vi det største (minste) elementet til B. (b) Dersom nabosøskenen har akkurat L/2 elementer, slår vi de to nodene sammen til én node (med L eller L 1 elementer) 4. Hvis foreldrenoden nå har et barn for lite, må vi gjøre det samme med denne. Osv... 5. Hvis roten til slutt bare har ett barn: lett roten, og la barnet bli ny rot. (Treet krymper nå ett nivå.) 6. Husk å oppdatere nøkkelverdiene underveis! Forelesning 12.9.2005 rk 17 av 28 Tidsforbruk Vi antar at M og L er omtrent like. iden hver interne node unntatt roten har minst M/2 barn, er dybden til et B-tre maksimalt log M/2 N. å hver node må vi utføre O(log M) arbeid (ved binærsøk i sortert array) for å avgjøre hvilken gren vi skal gå. Dermed tar søking O(log M log M/2 N) = O(log N) tid. Ved innsetting og sletting kan det hende at vi må utføre O(M) arbeid på hver node for å rydde opp (f.eks. flytte alle nøkkelverdiene i tabellen en plass til venstre). å innsetting og sletting kan ta O(M log M/2 N) = O( log M M ) log N) tid. Forelesning 12.9.2005 rk 18 av 28 Hvor stor skal M være? Hvor mange barn skal en node få lov å ha? Hvis hele B-treet får plass i internminnet, har empiriske målinger vist at M = 3 og M = 4 er de beste valgene (innsetting og sletting tar for lang tid hvis M blir for stor). Men B-trær har sin store styrke når ikke hele treet får plass i internminnet. iden en diskoperasjon tar nesten 1 000 000 ganger mer tid enn en operasjon i internminnet, gjelder det å minimalisere antall diskaksesser. Hvis det er plass, er det en god idé å lagre alle internnoder i internminnet og alle bladnoder på harddisk. Da kan man velge M = 4 og L så stor at hver bladnode fyller en diskblokk (eventuelt et disk cluster). Hvor stor skal M være når hele treet ligger på disk? Treet blir bredere og får mindre dybde desto større M er. Mindre dybde betyr færre diskaksesser, mens vi kan se bort fra det ekstra oppryddingsarbeidet i nodene som en stor M medfører fordi det foregår i internminnet. I praksis velger man M så stor at en internnode fortsatt får plass på én diskblokk (eller cluster), typisk i området 32 M 256. Man velger L slik at det samme gjelder for bladnodene. nalyser viser at B-trær blir ln 2 = 69% fulle (samme fyllingsgrad som utvidbar hashing). Forelesning 12.9.2005 rk 19 av 28 Forelesning 12.9.2005 rk 20 av 28

bstrakte datatyper En DT består av: et sett med objekter spesifikasjon av operasjoner på disse Eksempler: DT: binært søketre Operasjoner: Innsetting, søking, fjerning,... DT: mengde Operasjoner: union, snitt, finn,... DT: stakk Operasjoner: push, pop, top,... Hvorfor bruke DTer? DTer skiller det som er viktig (funksjonaliteten) fra detaljene (den konkrete implementasjonen). Dermed kan vi: jenbruke DTen i andre programmer. Enklere overbevise oss om at programmet er riktig. Forandre innmaten (kodingen) av DTen uten å forandre resten av programmet fordi grensesnittet er det samme. Lage modulære programmer. I Java er det naturlig å spesifisere en DT som et interface. Forelesning 12.9.2005 rk 21 av 28 Forelesning 12.9.2005 rk 22 av 28 Lister, stakker og køer Lister (kap. 3.2) 1, 2, 3,..., n takker (kap. 3.3) takker En variant av lister, der vi bare har lov til å sette inn og slette elementer fra en bestemt ende av listen. public interface takkinterface { /* Legge et element på toppen av stakken */ void push(object x); Inn Køer (kap. 3.4) Inn Bak Ut Ut Foran /* Fjerne et element fra toppen av stakken */ void pop(); /* Returnere elementet på toppen av stakken */ Object top(); /* Lege en ny stakk/tømme stakken */ void create(); /* jekke om stakken er tom */ boolean isempty(); Ofte vil pop også returnere elementet som fjernes. En stakk er det samme som en LIFO-kø ( Last In First Out ). Forelesning 12.9.2005 rk 23 av 28 Forelesning 12.9.2005 rk 24 av 28

rray-implementasjon 4 3 2 1 0 4 3 2 1 stakktopp Brukes ofte hvis antall elementer på stakken alltid er begrenset. ekerkjede-implementasjon 4 3 2 1 Innsetting og sletting vil da normalt skje på begynnelsen av listen: public void push(object x) { stakktopp++; [stakktopp] = x; public void pop() { stakktopp--; public Object top() { return [stakktopp]; I tillegg: eventuell feilhåndtering. 4 3 2 1 4 3 2 1 Forelesning 12.9.2005 rk 25 av 28 Forelesning 12.9.2005 rk 26 av 28 takkoperasjonene - tidsforbruk Uansett hvor mange elementer vi har på stakken, er vi garantert konstant tidsforbruk, det vil si O(1) for alle operasjonene. Dette gjelder uansett om implementasjonen bruker en array eller en pekerkjede. Bedre er det ikke mulig å få det, derfor er stakken en veldig populær DT. amtidig kan mange naturlige problemer løses ved hjelp av en stakk. Typisk bruksmønster er mange stakk-operasjoner, men få elementer på stakken om gangen. Eksempel: Beregning av postfiks uttrykk Ved hjelp av en stakk er det lett å beregne et postfiks uttrykk på følgende måte: For hvert symbol i input: Hvis symbolet er et tall, legges det på stakken. Hvis symbolet er en operator, popper vi to tall fra stakken, anvender operatoren på disse to tallene og dytter svaret tilbake på stakken. Hvis input var et ekte postfiks uttrykk, vil nå svaret ligge som det eneste elementet på stakken. Eksempel: 6 5 2 3 + 8 * + 3 + * å mange maskiner kan disse oversettes til kun to-tre instruksjoner i maskinkode. Forelesning 12.9.2005 rk 27 av 28 Forelesning 12.9.2005 rk 28 av 28