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

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

Et eksempel: Åtterspillet

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

ALGORITMER OG DATASTRUKTURER

Definisjon av binært søketre

Definisjon: Et sortert tre

Et eksempel: Åtterspillet

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

Object [] element. array. int [] tall

INF2220: Forelesning 2

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

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

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

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

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

Binære trær: Noen algoritmer og anvendelser

Lars Vidar Magnusson

Algoritmer og datastrukturer Assignment 11 Side 1 av 5

Lars Vidar Magnusson

INF2220: Forelesning 2

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

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

UNIVERSITETET. Indeksering. Konvensjonelle indekser B-trær og hashing Flerdimensjonale indekser Hashliknende strukturer.

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

Korteste vei i en vektet graf uten negative kanter

PG4200 Algoritmer og datastrukturer Forelesning 7

Selv-balanserende søketrær

KONTINUASJONSEKSAMEN

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

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

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

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

Filsystemet fra innsiden

MAT1030 Forelesning 30

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

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

Anvendelser av grafer

Algoritmer og Datastrukturer

NyGIV Regning som grunnleggende ferdighet

Hashing: Håndtering av kollisjoner

Algoritmeanalyse. (og litt om datastrukturer)

EKSAMEN med løsningsforslag

Liste som abstrakt konsept/datatype

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

Tallet 0,04 kaller vi prosentfaktoren til 4 %. Prosentfaktoren til 7 % er 0,07, og prosentfaktoren til 12,5 % er 0,125.

Forelesning 9 mandag den 15. september

Ordliste. Obligatorisk oppgave 1 - Inf 1020

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

Algoritmer - definisjon

INF2220: Time 12 - Sortering

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

Et eksempel: Åtterspillet

INF Algoritmer og datastrukturer

Algoritmer og Datastrukturer

Forelesning 28: Kompleksitetsteori

Datastrukturer for rask søking

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

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

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

Kap 9 Tre Sist oppdatert 15.03

TMA4140 Diskret matematikk Høst 2011 Løsningsforslag Øving 7

IN Algoritmer og datastrukturer

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.4

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

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

Labyrint Introduksjon Scratch Lærerveiledning. Steg 1: Hvordan styre figurer med piltastene

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Sorteringsproblemet. Gitt en array A med n elementer som kan sammenlignes med hverandre:

Notater til INF2220 Eksamen

Hvor raskt klarer vi å sortere?

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

MAT1030 Diskret matematikk. Kompleksitetsteori. Forelesning 29: Kompleksitetsteori. Dag Normann KAPITTEL 13: Kompleksitetsteori. 7.

Repetisjon: høydepunkter fra første del av MA1301-tallteori.

INF Algoritmer og datastrukturer

Generelt om permanent lagring og filsystemer

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

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

Mesteparten av kodingen av Donkey Kong skal du gjøre selv. Underveis vil du lære hvordan du lager et enkelt plattform-spill i Scratch.

INF2220: Time 4 - Heap, Huffmann

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

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

INF Algoritmer og datastrukturer

Preken 14. august s i treenighet Kapellan Elisabeth Lund. Tekst: Joh. 15, 13-17

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

Vi skal se på grafalgoritmer for:

Databasedesign HVA? ???? HVORDAN? E/R diagram. Begrepsmessig databasedesign. Logisk databasedesign. Tabeller. Fysisk databasedesign

Fortsettelses kurs i Word

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

Vi skal se på grafalgoritmer for:

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

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

Tyngdekraft og luftmotstand

Oppgave 1 a. INF1020 Algoritmer og datastrukturer. Oppgave 1 b

Høyder på elliptiske kurver og faktorisering. Kristian Gjøsteen, NTNU Oppdatert 1. november 2002

UNIVERSITETET I OSLO

INF2220: Forelesning 3

UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

Balanserte binære søketrær

Transkript:

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

Flerveis søketre * Generalisering av binært søketre Binært søketre: Hver node har maksimalt 2 subtrær/barn og 1 verdi Barna ligger sortert på verdi i forhold til den ene verdien Flerveis søketre av orden** m: Hver node har maksimalt m barn og m 1 sorterte verdier Barna ligger sortert «innimellom» verdiene i noden *: Aka. «multi-way search tree», «n-ært søketre» **: Begrepet orden for et søketre er ikke entydig definert i litteraturen

Et flerveis søketre av orden 4

Ordning av et flerveis søketre En node med p barn/subtrær har p 1 verdier Verdier: K1, K2,..., Kp 1 Subtrær: S1, S2,..., Sp Verdiene internt i en node er sortert stigende: K1 K2... Kp 2 Kp 1 Subtrærne er sortert slik at: Alle verdier i S1 er mindre enn K1 Alle verdier i Si er større eller lik Ki 1 og mindre enn Ki, i = 2, 3, 4,..., p 1 Alle verdier i Sp er større eller lik Kp 1

p=4 S1 S2 S3 S4 Keys < K1 K1 Keys < K2 K2 Keys < K3 K3 Keys

Flerveis søketre av orden 5 Merk at nodene kan ha flere tomme subtrær

Søking i flerveis søketre Samme prinsipp som for binært søketre Følger en vei fra roten og nedover i treet I hver node sjekker vi om verdien vi søker er lik, mindre eller større enn de sorterte nøkkelverdiene i noden Går videre fra en node til det subtreet der verdien skal ligge, hvis den finnes i treet

Effektivitet av flerveis søketre Søking, innsetting og fjerning har arbeidsmengde proporsjonal med høyden av treet Høyden av et flerveis søketre av orden m avhenger av: Om treet er balansert Hvor fulle nodene er, dvs. hvor mange verdier som er lagret i hver node (maksimalt m - 1) Hvis treet er balansert og nodene er godt fylt opp, er søking og innsetting meget raskt

B-tre* Et flerveis, selv-balanserende søketre Bayer / McCreight: "Organization and Maintenance of Large Ordered Indexes", Acta Informatica (1972) Et B-tre er alltid perfekt balansert Nodene i treet er minst halvveis fylt opp med verdier B-trær av svært høy orden brukes ofte i databasesystemer og filsystemer Garanterer O(log n) oppførsel for søking, innsetting og fjerning *: B?

Definisjon av B-tre Et B-tre av orden m er et flerveis søketre der: Roten er enten et blad eller har minst to subtrær Alle noder (unntatt roten) inneholder minst m/2 verdier og maksimalt m - 1 verdier En node med k verdier har enten 0 barn (en bladnode) eller k + 1 barn (indre node) Alle bladnoder ligger på samme nivå i treet

B-tre av orden 5

B-tre av orden 5

De to øverste nivåene i et B-tre av orden 11

Effektivitet, B-tre av orden 201 Antall noder og verdier i hvert nivå i treet: Min. antall noder Min. antall verdier Maks. antall noder 1 1 1 1 200 2 2 200 201 40 200 3 202 20 200 40 401 8 080 200 4 20.402 2.040.200 8.120.601 1.624.000.000 Nivå Maks. antall verdier

Søking i B-trær «An algorithm for finding a key in B-tree is simple. Start at the root and determine which pointer to follow based on a comparison between the search value and key fields in the root node. Follow the appropriate pointer to a child node. Examine the key fields in the child node and continue to follow the appropriate pointers until the search value is found or a leaf node is reached that doesn't contain the desired search value»

Vekst av B-trær Kravet om at alle blader skal være på samme nivå gir en karakteristisk oppførsel for B-trær B-trær vokser ikke «nedover» ved at de får nye blader, som ved innsetting i binære søketrær Istedet vokser de «oppover» ved at de får ny rot hver gang antall nivåer i treet øker med 1

Innsetting av ny verdi i B-tre En ny verdi settes inn i eksisterende bladnode Når en bladnode er full deles den i to, og en verdi sendes «oppover» i treet Demo av innsetting i B-tre av orden 3, med maksimalt 2 verdier og 3 barn per node Innsetting er alltid O(log n)

Algoritme for innsetting i B-tre Finn bladnoden der ny verdi skal settes inn Hvis bladnoden ikke er full: Sett inn ny verdi sortert i bladnoden Ellers, hvis bladnoden er full av verdier: Del bladnoden i to noder, med halvparten av verdiene i hver node Send midterste verdi et nivå oppover for innsetting i foreldernoden Hvis foreldernoden også blir full, fortsettes sending av verdier oppover i treet på samme måte

Eksempel: Innsetting i B-tre av orden 5

Etter innsetting av 395

Etter innsetting av 382

Etter innsetting av 490

Fjerning av verdi i B-tre Kan resultere i noder med for få verdier (< m/2) Vil lage et «hull» i strukturen hvis verdien som fjernes er i en indre node Algoritmen for fjerning «reparerer» treet med: Flytting av verdier mellom noder (aka rotasjoner) Sammenslåinger (merging) av to noder til én ny node Fjerning av verdier er vist i læreboka for B-trær med orden m = 3 (se avsnitt 14.2) Fjerning i B-trær er relativt «fiklete», med flere spesialtilfeller, men er alltid O(log n)

Representasjon av B-tre med pekere En node i et B-tre av orden m kan representeres med et klasseobjekt med to arrayer: En array av lengde m med pekere til barna En sortert array av lengde m 1 med verdier I tillegg må hver node holde rede på antall verdier som er lagret i noden Tilgang til hele treet gjennom en peker til roten

Representasjon av B-tre med array B-trær brukes ofte til å håndtere data som er lagret i sekundærminnet (typisk på disk) Fungerer i praksis dårlig med «pekere» (diskadresser) i noder som ligger spredt rundt i sekundærminnet Det er derfor vanlig i stedet å representere hele B-treet som én lang array: Arrayen er delt opp et stort antall like lange segmenter Hvert segment lagrer data for én node «Pekerne» til barna er bare indekser i arrayen

B-trær og sekundærminne Hvis datamengdene er for store til å få plass i RAM, må de flyttes frem og tilbake mellom RAM og disk (paging) Lesing og skriving til/fra disk/sekundærminne er flere tusen ganger tregere enn å lese/skrive RAM Disker leses og skrives derfor i store «datablokker» for å øke effektiviteten, typisk blokkstørrelse er 4 KBytes B-trær lages slik at antall diskaksesser minimeres: Størrelsen på en node tilpasses blokkstørrelsen i filsystemet, slik at alle dataene i noden kan håndteres med bare én read/write-operasjon

To vanlige varianter av B-trær B* - trær: Utnytter plassen på hvert nivå i treet bedre B+ - trær: Gjør traversering av treet mer effektivt

B* - trær B*-treet har alle egenskapene til et B-tre, men: I et B-tre av orden m har alle noder minst m/2 verdier I et B*-tre av orden m har alle noder minst 2 m/3 verdier Flere verdier i hver node betyr færre nivåer i treet Algoritmene for innsetting og fjerning er forskjellige: I stedet for å dele en node i to med en gang den er full, flyttes verdier over til søskennoder Når to søskennoder er fulle av verdier, deles de i tre nye noder

Traversering av B-trær En sortert gjennomgang av alle dataene lagret i et B-tre kan gjøres med inorder traversering Hver node må oppsøkes opptil m + 1 ganger i løpet av en traversering av B-treet Hvis deler av B-treet ligger utenfor RAM, blir dette svært lite effektivt, med mye lesing av data fra disk B+ - trær løser dette problemet

+ B - trær Alle nøkkelverdier i indre noder lagres en gang til som sin egen inorder etterfølger i en bladnode Alle bladnodene lenkes sammen med «pekere» for å kunne gå gjennom alle dataene sortert med minimalt antall diskaksesser Lagrer bare nøkkelverdier inne i treet Bruker et ekstra lag med noder på nederste nivå som inneholder pekere til selve dataobjektene

Eksempel: B+ - tre

Eksempel: B+- tre

Eksempel: B+- tre