18 Multivejstræer og B-træer.



Relaterede dokumenter
19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse.

17 Søgning og Søgetræer.

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

Skriftlig eksamen i Datalogi

Talrækker. Aktivitet Emne Klassetrin Side

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel:

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign

Videregående Programmering for Diplom-E Noter

DM507 Algoritmer og datastrukturer

P2-projektforslag Kombinatorik: grafteori og optimering.

Datastrukturer (recap)

Vejledning til at lave almindelige bordkort i Draw Side 1

Fra tilfældighed over fraktaler til uendelighed

t a l e n t c a m p d k Matematik Intro Mads Friis, stud.scient 27. oktober 2014 Slide 1/25

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

Datastrukturer (recap)

Abstrakte datatyper C#-version

Spil om LEDELSE. Rigtig god fornøjelse!

Vejledning til Photofiltre nr. 117 Side 1

Regneark II Calc Open Office

Definition : Et træ er en sammenhængende ikke-orienteret graf uden simple kredse. Sætning : En ikke-orienteret graf er et træ hvis og kun hvis der er

Søren Christiansen

Differentialregning Infinitesimalregning

Algoritmisk geometri

Indhold. OpenOffice Writer fortsættelse Side 1 af 14

LEKTION 22 FARVEBEHANDLING

Substitutions- og indkomsteffekt ved prisændringer

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

qwertyuiopåasdfghjklæøzxcvbnmqw ertyuiopåasdfghjklæøzxcvbnmqwert yuiopåasdfghjklæøzxcvbnmqwertyui Polynomier opåasdfghjklæøzxcvbnmqwertyuiopå

Athena DIMENSION Varmeanlæg 4, Eksempel

Matematiske metoder - Opgaver

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 7 n 1 7 7/n. 7nlogn. 7n 7nlogn n7

3 Algebraisk Specifikation af Abstrakte Datatyper.

KOMMENTARSKABELON. Høring af CCS Informationsstruktur. Foreningen af Rådgivende Ingeniører, FRI og DANSKE ARK

2. del. Reaktionskinetik

Formelsamling Matematik C

Intervalsøgning. Algoritmisk geometri. Motivation for intervaltræer. Intervalsøgning. Lad der være givet en database over ansatte i en virksomhed

Brug Photo Story 3 en let introduktion

Kom i gang-opgaver til differentialregning

Differentialkvotient bare en slags hældning

Danmarks Tekniske Universitet

Binære søgetræer. Nærmeste naboer Binære søgetræer Indsættelse Predecessor og successor Sletning Algoritmer på træer og trægennemløb.

Basale forudsætninger. Sortering ved fletning med tre bånd, i to faser.

Danmarks Tekniske Universitet

Håndtering af stof- og drikketrang

Opgave: FIL File Paths

Maskinkomponentskabelon Modelkomponentskabelon Maskinkomponentskabelongruppe

Datastrukturer (recap) Datastruktur = data + operationer herpå

Binære søgetræer. Nærmeste naboer Binære søgetræer Indsættelse Predecessor og successor Sletning Trægennemløb. Philip Bille

Befolkningsprognose. Syddjurs Kommune

På opdagelse i Mandelbrot-fraktalen En introduktion til programmet Mandelbrot

Lineære ligningssystemer

VELKOMMEN TIL PHOTO STORY FOR WINDOWS

Procedurer og funktioner - iteration og rekursion

Sortering af information er en fundamental og central opgave.

Sortering. Eksempel: De n tal i sorteret orden

Aluproff I Midtager 9-11 I 2605 Brøndby I Tlf: I aluproff@aluproff.dk I 2/2

Vejledning til Photofiltre nr. 118 Side 1

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Et udtryk på formena n kaldes en potens med grundtal a og eksponent n. Vi vil kun betragte potenser hvor grundtallet er positivt, altså a>0.

Befolkningsprognose. Syddjurs Kommune

Modul 8: Clouds (Lagring af filer)

Programmering i C. Lektion december 2008

A/B Njal. Referat af ekstraordinær generalforsamling tirsdag den 11. november 2003, kl i i Njalsgade Teater

Profilmodel 2012 Højeste fuldførte uddannelse

8500 Undervisningsteori

På alle områder er konklusionen klar: Der er en statistisk sammenhæng mellem forældre og børns forhold.

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 2 2 n 1/n (logn) n. n 2

Eksempler på elevbesvarelser af gådedelen:

Sortering af information er en fundamental og central opgave.

dcomnet-nr. 6 Talrepræsentation Computere og Netværk (dcomnet)

Opret og godkend betalinger i mapper

Sortering. Eksempel: De n tal i sorteret orden

Del 3: Statistisk bosætningsanalyse

Hvad skal vi lave i dag?

Brugermanual til Wordpress 3.2.x Content Management System

Vejledning til Photofiltre nr.172 Side 1 Lave et postkort som foldes sammen til A6 størrelse

Velkommen til dag 9 i IT for let øvede

Kapitel 3 Centraltendens og spredning

Linket viser jer frem til billedet nedenfor, her skal du blot skrive jeres brugernavn og adgangskode. Indtast din adgangskode her:

Tilbagegang i arbejdernes lønindkomst siden krisen

Introduktion. Introduktion. Algoritmer og datastrukturer. Eksempel: Maksimalt tal

Grådige algoritmer. Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

Introduktion. Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3. Philip Bille

BRP Kursusintroduktion og Java-oversigt

ipad for let øvede modul 8 Underholdning på ipad Læsning

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

Benchmark for de statslige forvaltningsorganer

TV-Overvågning Teknisk Specifikation

Velkommen til IT for let øvede

Redigering af Billeder i Picasa. Enkle forbedringer og justeringer.

Vejledning til Photofiltre nr. 119 Side 1

Matematikken bag Parallel- og centralprojektion

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

i x-aksens retning, så fås ). Forskriften for g fås altså ved i forskriften for f at udskifte alle forekomster af x med x x 0

Prøveudtagning i forbindelse med bestemmelse af fugt i materialer

Transkript:

18 Multivejstræer og B-træer. Multivejs søgetræer. Søgning i multivejssøgetræer. Pragmatisk lagring af data i multivejstræer. B-træer. Indsættelse i B-træer. Eksempel på indsættelse i B-træ. Facts om B-træer. B+ træer. 265

Multivejstræer og multivejs-søgetræer. Et multivejstræ er et ordnet træ af grad større end 2. Et multivejs-søgetræ af grad n er et multivejstræ T af grad n, som opfylder: Nøglerne Ni i roden af T er ordnede, 1 <= i <= (n - 1). For alle nøgler L i Ti-1 og for alle nøgler R i Ti : L < Ni < R (1 <= i < n). T0... Tn-1 er multivejs-søgetræer. T: n = 4 N1 N2 N3 T0 T1 T2 T3 20 40 55. 4 13.. 23 30. 35.. 41. 60. 77.. 7.. 25. 29.. 57. Motivationen for at se på multivejstræer er at kunne arbejde med søgetræer, der egner sig til at blive lagret på pladelager (disk). Emnet er altså ekstern søgning. Det er ikke attraktivt at benytte binære søgetræer på et sekundært og langsomt lagermedium. Årsagen er, at i et binært træ skal relativ mange, små knuder aflæses/påvirkes for at gennemføre en given operation (søgning, indsættelse, sletning). I et multivejstræ kan der repræsenteres mange dataobjekter i én knude i træet. Knudestørrelsen kan afpasses efter blokstørrelsen på pladelageret. Ligesom vi kender det fra binære søgetræer, vil vi her antage, at en nøgle højst er tilstede én gang i et multivejs-søgetræ. Hvis vi vil arbejde med balancerede multivejstræer, giver vi køb på udnyttelsesgraden af træets knuder. Mao. vi accepterer, at der i visse situationer er uudnyttet plads i knuderne. Ovenstående viser et eksempel på et multivejs-søgetræ af graden 4. En prik i en knude betyder en null-pointer (void). Bemærk at der højst kan være 3 nøgler (data) i en knude i dette multivejstræ. 266

Søgning i multivejs-søgetræer. Multivejs-søgning(T: Multivejs-søgetræ, N: Nøgle): Søgeresultat: Søg efter N i roden af T ; If N er fundet then Returner det dataobjekt hvori N er nøgle elseif find nøglerne N0 og N1 i roden af T så N0 < N < N1 ; If der findes et ikke-tomt undertræ U mellem N0 og N1 then Returner Multivejs-søgning(U, N) else Returner roden af T Søg efter N i roden af T : Binær søgning Lineær søgning Ovenstående algoritmeskitse for søgning i et multivejstræ returnerer enten det dataobjekt, hvori N er nøgle, eller den knude i multivejstræet hvori et evt. objekt med N som nøgle kan indsættes, hvis der senere bliver behov for dette. Når vi skriver dataobjekt mener vi nøglen og satellit-informationen tilsammen. Hvis N i ovenstående algoritmeskitse er mindre end den mindste nøgle i en knude eksiterer N0 naturligvis ikke. Tilsvarende hvis N er større end den største nøgle i knuden eksisterer N1 ikke. I disse tilfælde refererer U til undertræet mest til venstre, hhv. undertræet mest til højre i knuden. Som antydet, kan man enten benytte lineær søgning eller binær søgning for at finde nøglen i knuden. 267

Praktisk lagring af data i multivejstræer. 1. Objekt 1 Objekt 2 Objekt 3 2. N1 N2 N3 Dataområde Objekt 1 Objekt 2 20 40 55 Objekt 3. 23 30. 35.. 41.. 60. 77. Det vises på denne slide, hvordan en udvalgt knude fra træet forneden til venstre kan repræsenteres. I tilfælde 1 er selve de tre dataobjekter (inden i hvilke nøglerne og andre data befinder sig) lagret inden i knuden. Dette giver en stor knude. Dette kan være uhensigtsmæssigt, idet man under søgning (og dermed også indsættelse og sletning) vil være tvunget til at læse dataobjekterne af en række irrelevante knuder ind fra sekundært lager til primært lager, i selve søgeprocessen. I tilfælde 2 er kun nøglen af objekterne lagret i knuderne i træet. Selve dataobjekterne er lagret i et særskilt dataområde. De stiplede pile angiver referencer til (adresser på) disse objekter. I kapitlet om filer og indekser vil vi vende tilbage til problematikken om dataområder (som en abstraktion over filer hvorpå der kan lagres objekter). 268

B-træer. Et B-træ af grad n er et multivejs-søgetræ af grad n hvor: 1. Knuder, som ikke er blade eller roden, har x sønner, hvor n/2 <= x <= n. 2. Roden har mindst 2 sønner (medmindre den er et blad). 3. Knuder, som ikke er roden, har y dataobjekter, hvor n/2-1 <= y <= n-1. 4. Indre knuder med k sønner indeholder k-1 dataobjekter. 5. Alle blade har samme dybde. 55 24 35 66 78 11 15 19 22 28 31 38 43 44 58 61 62 69 71 75 83 87 91 97 Punkt 3 følger af punkt 4 pånær i tilfælde af bladene. Den egentlige rolle af punkt 3 er altså at begrænse antallet af dataobjekter i bladene. Et B-træ af graden n kan maksimalt have n-1 dataobjekter (nøgler) pr. knude. Hvis n er ulige, f.eks. 7, siger ovenstående definition, at 3.5 <= antal sønner <= 7. I praksis betyder dette, at antallet af sønner er 4, 5, 6 eller 7. Ligeledes siger ovenstående definition, at 2.5 <= antal dataobjekter <= 6. Dette betyder, at antallet af dataobjekter pr. knuder er 3, 4, 5 eller 6. Sidste punkt i definitionen af B-træ afspejler, at træet er vel afbalanceret. Der er vist et konkret eksempel på et B-træ, som vi antager har grad 5. Nøglerne repræsenterer her dataobjekterne, og nøglerne er heltal. I dette træ har alle knuder (på nær roden) 3, 4 eller 5 sønner; og alle knuder (igen pånær roden) har 2, 3 eller 4 dataobjekter. Det er vigtigt at bemærke, at B-træer, som defineret i disse noter, er anderledes end B-træerne der diskuteres i Weiss. Vi kalder Weiss' B-træer for B+ træer. Vi diskuterer kort B+ træer i slutningen af dette kapitel. 269

Indsættelses-algoritme for B-træer. Indsæt( T: B-træ, Obj: Data-objekt): Resultat := Multivejs-søgning( T, Obj.nøgle); If Obj ikke er fundet i Resultat then -- Resultat er knuden, hvori Obj skal indsættes Indsæt-i-knude(Resultat, Obj) Indsæt-i-knude(K: B-træes-knude; Obj: Data-objekt) if plads til endnu et objekt i K then indsæt Obj på den rigtige plads i K else del K i to knuder L og M, samt et opadstigende data-objekt Op ; If K.far eksisterer then F := K.far else F := En ny rod ; Indsæt-i-knude(F, Op ); Indsæt L og M som undertræer af F Proceduren anvender 'multivejs-søgning', som er vist tidligere i denne forelæsning. Det er let at indse, at hvis dataobjektet ikke findes i forvejen i B-træet, da bliver 'insæt-i-knude' kaldt på et blad i 'indsæt'. På ét punkt er proceduren 'indsæt-i-knude' ikke dækkende : Hvis et element indsættes i forældre knuden til K, og hvis denne forældre knude igen skal deles, hvordan indsættes L og M i "de to forældreknuder"? Hvis der ikke er plads til et dataobjekt i en knude i B-træet kunne det være en god ide at undersøge, om der er god plads i søskende-knuderne. Hvis dette er tilfældet, er det forholdsvis let at foretage en omfordeling af objekter mellem to søskende knuder. Bemærk, at en sådan omfordeling også involverer et dataobjekt i de to søskendeknuders fælles forældreknude. I indsættelse-scenariet herefter, er der diskuteret et tilfælde af en sådan omfordeling. 270

Indsættelses-scenario i et B-træ (1). Indsætter 50: Indsætter 11, 19, 34, 60: 50 34 11 19 50 60 På denne og de følgende fire slides vises, hvordan et B-træ af grad 5 udvikler sig ved indsættelse af en række tal. De indsatte tal skal opfattes som nøgler for de egentlige objekter i B-træet. Knuder, som er indrammet med fed streg (eller lignende), tjener kun som identifikation af en knude på tværs af to øjebliksbilleder på samme slide. 271

Indsættelses-scenario i et B-træ (2). Indsætter 78, 87: 34 11 19 50 60 78 87 Indsætter 65: 34 65 11 19 50 60 78 87 Når 65 indsættes i det øverste B-træ har vi illustreret, at knuden med de fire dataobjekter opdeles i to knuder. Hvis vi i stedet for foretog en omfordeling af dataobjekter i de to blade (som jo er søskende) kunne vi i dette tilfælde have undgået at dele knuden. Dette giver en bedre udnyttelse af knuderne i B-træet. Det resulterende B-træ er vist nedenfor: 50 11 19 34 60 65 78 87 272

Indsættelses-scenario i et B-træ (3). Indsætter: 38, 40, 90, 26, 29: 34 65 11 19 26 29 38 40 50 60 78 87 90 Indsætter: 45: 34 45 65 11 19 26 29 38 40 50 60 78 87 90 Tallet 45 skal indsættes mellem 40 og 50 i knuden med den fede ramme i træet øverst på sliden. Da træet er af grad 5, er denne knude fyldt op. Indsættelsesalgoritmen siger, at vi skal dele knuden i to, samt at vi skal indsætte et opadstigende objekt (45) i faderen, hvor der er i vort tilfælde er god plads til den. 273

Indsættelses-scenario i et B-træ (4). 34 45 65 11 19 26 29 38 40 50 60 78 87 90 Indsætter 32: 26 34 45 65 11 19 29 32 38 40 50 60 78 87 90 Træet foroven er identisk med træet forneden på forrige slide. Når vi indsætter 32 ser vi, at det hører hjemme i bladet til venstre; her er ikke plads, og derfor deles dette blad i to knuder samt et opadstigende objekt (26). Der er stadig plads til dette objekt i roden i B-træet. 274

Indsættelses-scenario i et B-træ (5). Indsætter 27, 33, 63, 75: 26 34 45 65 11 19 27 29 32 33 38 40 50 60 63 75 78 87 90 Indsætter 83: 45 26 34 65 83 11 19 27 29 32 33 38 40 50 60 63 75 78 87 90 Efter at have indsat 27, 33, 63 og 75 opstår der en interessant situation når vi indsætter 83. Der er ikke plads til objektet med nøgle 83 i bladet længst til højre, hvor det jo hører hjemme. Vi deler derfor knuden i to samt et opadstigende objekt: 83. Nu er der imidlertid ikke plads til 83 i roden, hvorfor vi også må dele roden i to knuder, samt et nyt opadstigende objekt (45), der nu placeres i en ny rod. Det resulterede træ er vist nederst. Dette afslutter vores indsættelses-scenario. 275

Sletning af dataobjekter fra B-træer. Fremgangsmåde. Givet: Nøglen N og B-træet T. Ønskes: Slet dataobjektet D med nøglen N i B-træet T. Metode: 1. Find dataobjektet D med nøglen N i T ; 2. Hvis D er i en indre knude: 2a. Erstat D med det største dataobjekt X, der er mindre end D ; 2b. Slet dataobjektet X, som altid vil være i et blad. 3. Hvis D er i et blad b: 3a. Hvis b indeholder mere end det min. antal dataobjekter: Slet D umiddelbart. 3b. Ellers: Hvis b har minimalt dataindhold: 3ba. Lån om muligt et dataobjekt fra en af b's søskende knuder. 3bb. Ellers: Slå b sammen med en af b's søskendeknuder, og træk objektet mellem disse to knuder ned i den ny knude. Dette kan forårsage, at indre knuder slåes sammen, og ultimativt, at træets højde reduceres. Bemærk, at tilfælde 2b kan realiseres ved et rekursivt kald af den slette-operation, vi er ved at redegøre for. Opgave: Tag udgangspunkt i det resulterede B-træ i indsættelses-scenariet på de foregående slides, og slet alle de indsatte objekter (a) først i samme rækkefølge, som de blev indsat, (b) dernæst i modsat rækkefølge, som de blev indsat. Tegn passende øjebliksbilleder af B-træerne undervejs i slette-processen. 276

Facts om B-træer. T er B-træ af grad g og højde h: Maximum antal knuder: Maximum antal dataobjekter: Minimum antal dataobjekter: h + 1 0 1 2 h g - 1 g + g + g +... + g = g - 1 2 h + 1 g - 1 g+1 ( ) h - 1 2 T er et B-træ af grad g med N dataobjekter: Højde af T <= log x ((N + 1)/2) hvor x = (g+1)/2. På denne slide antager vi af bekvemmelighedshensyn (for at undgå at skulle angive afrundinger), at B-træer har ulige grad. Bemærk, at vi skelner mellem knuder i B-træer og dataobjekter, hvoraf der jo kan være op til g-1 pr. knude, hvor g betegner B-træets grad. Lad a være det minimale antal dataobjekter pr. knude og lad b være det minimale antal sønner pr. knude. Hvis g er lige er a = g/2-1, og b = g/2. Hvis g er ulige er a = (g-1)/2 og b = (g+1)/2. Det minimale antal dataobjekter i B-træet er nu 1 + 2a +2ba + 2bba+... Når man regner lidt på denne sum får man ovenstående resultat. Vurderingen af højden opnåes ud fra en observation om, at hvis et B-træ af højde h indeholder N dataobjekter vil der være N+1 "stopklodsknuder" (se nedenfor) på højde-niveau h+1 i træet. Endvidere gælder, at der minimum vil være 2 b^h knuder på dette "stopklodsniveau", hvor b har samme betydning som ovenfor. Dette giver ovenstående vurdering. "Stopklodsknuder" er tænkte knuder på et niveau dybere end bladknuderne i et B-træ. I stedet for stopklodsknuder kan vi tale om nil-pointere til undertræer. Der er stopklodsknuder før, mellem og efter alle dataobjekter i de egentlige blad-knuder i træet. 277

Køretid af søgning, indsættelse og sletning i B-træer. T er et B-træ af grad g med N dataobjekter: Søgning efter dataobjekt i T: Køretid = arbejdet pr. knude. højden af træet <= k 1. log(g). log x ((N + 1)/2) = O(log(g). log(n)) Indsættelse eller sletning af et dataobjekt i T: Køretid = arbejdet pr. knude. højden af træet <= k 2. g. log x ((N + 1)/2) = O(g. log(n)) I ovenstående anvender vi vurderingen af højden af T fra forrige slides. Ret beset er det ikke højden af T, som indgår ovenfor, men antallet af niveauer i træet (som er højden + 1). Denne lille forskel berører dog ikke O(...) vurderingen af køretidsresultaterne, idet vi jo ser bort fra lavere ordens led i O(...). Log(x) betegner ovenfor logaritmefunktionen med grundtal 2. 278

B+ træer (1). Et B+ træ af grad n er et ordnet træ af grad n hvor Alle dataobjekter findes i bladene. De indre knuder udgør et indeks til dataobjekterne og hvor Knuder, som ikke er blade eller roden, har mellem n/2 og n sønner. Roden har mindst 2 sønner. Blade har mellem n/2 og n dataobjekter. Alle blade har samme dybde. 58 24 38 69 83 11 15 19 22 24 28 31 35 38 43 44 55 58 61 62 66 69 71 75 78 83 87 91 97 Denne slide giver Weiss' definition af et B+ træ på en form, som er sammenlignelig med vores tidligere definition af et B-træ. Hvis n er et ulige tal, skal størrelsen n/2 ovenfor rundes op. De understregede dele af definitionen ovenfor angiver afvigelserne fra vores tidligere definition af B-træer. Et B+ træ er ikke et søgetræ (men det minder en del om et søgetræ). Forskellen består i, at et søgetræ har dataobjekter i indre knuder. I et B+ træ udgør de indre knuder et indeks, og elementerne i dette indeks findes også i bladene. Et element i en indre knude udvælges som den mindste nøgle i det højre undertræ. Efter indsættelse og sletning justeres indekset efter denne regel. Der er altså ikke i B+ træer noget opadstigende eller nedaddalende dataobjekt at tage vare på under indsættelse hhv. sletning. Dette berøres også på næste slide. Nederst er vist B+ træet, som svarer til B-træet fra sliden med navn "B-træer". 279

B+ træer (2). I en indre knude af et B+ træ af grad n: For alle nøgler L i blade af T i-1 og for alle nøgler R i blade af T i : L < N i <= R (1 <= i < n). Søgning: Analog til søgning i multivejs-søgetræ. Indsættelse: Ved knude-delning må strukturen af indekset tilpasses. Intet "opad-stigende" element. B+ træer vokser på samme måde som B-træer. Indre knude: N1 N2 N3 Blad: n = 4 n = 4 N1 N2 N3 Ubrugt T0 T1 T2 T3 O1 O2 O3 Referencer til sønner. Referencer til dataobjekter. Bemærk den strukturmæssige lighed mellem indre knuder og blade. I blade er der et ubrugt pointer-plads, som passende kan bruges til at kæde alle blade sammen. Dette vil gøre det meget effektivt at løbe alle data igennem i ordnet rækkefølge. I B+ træer er der begrebsmæssig forskel på blade og indre knuder. Derfor kan maximumsantallet af nøgler i bladene gøres helt uafhængig af maximumsantallet af nøgler i indre knuder. 280