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

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

Hashing. INF Algoritmer og datastrukturer HASHING. Hashtabeller

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

INF2220: Forelesning 2

INF2220: Forelesning 3

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

INF2220: Forelesning 2

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

INF2220: Forelesning 3

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

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

Lars Vidar Magnusson

Definisjon av binært søketre

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

Inf 1020 Algoritmer og datastrukturer

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

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

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

Definisjon: Et sortert tre

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

Liste som abstrakt konsept/datatype

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

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

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

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

Uke 5 Disjunkte mengder

Notater til INF2220 Eksamen

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

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

Datastrukturer. Algoritmer og datastrukturer. Øvingsforelesning 2

INF1020 Algoritmer og datastrukturer

Hashing: Håndtering av kollisjoner

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

INF Algoritmer og datastrukturer

... HASHING. Hashing. Hashtabeller. hash(x)

Et eksempel: Åtterspillet

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

INF Algoritmer og datastrukturer

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

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

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

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

Grunnleggende Datastrukturer

INF1020 Algoritmer og datastrukturer. Dagens plan

EKSAMEN med løsningsforslag

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

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

IN Algoritmer og datastrukturer

Balanserte binære søketrær

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

Lars Vidar Magnusson

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.

Binære trær: Noen algoritmer og anvendelser

... Dagens plan. Prioritetskø ADT

Stack. En enkel, lineær datastruktur

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

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

Disjunkte mengder ADT

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

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

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

PG4200 Algoritmer og datastrukturer Forelesning 7

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO. Indeksering. Hvordan finne et element raskt? Institutt for Informatikk. INF Ellen Munthe-Kaas

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

INF Algoritmer og datastrukturer

UNIVERSITETET. Indeksering. Hvordan finne et element raskt? Vera Goebel, Ellen Munthe-Kaas

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

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

Kap 9 Tre Sist oppdatert 15.03

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

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

INF2220: Forelesning 1

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

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

København 20 Stockholm

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

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

Selv-balanserende søketrær

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

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

INF2220: Time 4 - Heap, Huffmann

Datastrukturer for rask søking

Lenkelister, iteratorer, indre klasser. Repetisjonskurs våren 2018 kristijb

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

INF2220: Forelesning 1

UNIVERSITETET I OSLO

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

Eksamen iin115 og IN110, 15. mai 1997 Side 2 Oppgave 1 Trær 55 % Vi skal i denne oppgaven se på en form for søkestrukturer som er spesielt godt egnet

EKSAMEN. Algoritmer og datastrukturer

Algoritmer og datastrukturer Eksamen

INF1010 siste begreper før oblig 2

Algoritmer og Datastrukturer

Dagens tema INF1010 INF1010 INF1010 INF1010

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

UNIVERSITETET I OSLO

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

Transkript:

Dagens plan: Utvidbar hashing (kapittel 5.6) B-trær (kap. 4.7) Abstrakte datatyper (kap. 3.1) Stakker (kap. 3.3) Når internminnet blir for lite En lese-/skriveoperasjon på en harddisk (aksesstid 7-12 millisekunder) tar nesten 1 000 000 ganger lenger tid enn tilsvarende operasjon i internminnet (aksesstid ca. 10 nanosekunder). O modellen er ikke lenger gyldig ved hyppige diskaksesser siden den forutsetter at alle operasjonenen tar like lang tid Dersom ikke hele datastrukturen får plass i interminnet (hurtiglageret), lønner det seg nesten alltid å bruke datastrukturer som minimaliserer antall diskoperasjoner. Ark 1 av 32 Forelesning 4.9.2006 Forelesning 4.9.2006 Ark 2 av 32 Utvidbar hashing Anta at vi skal lagre N dataelementer og at N varierer med tiden. kan lagre maksimalt M elementer i en diskblokk (= den delen av harddisken som kan hentes inn i en enkel leseoperasjon). Problemet med å bruke vanlig hashing er at kollisjoner kan føre til at find(x) må undersøke mange diskblokker selv om hashfunksjonen distribuerer elementene godt. rehashing blir fryktelig kostbart. Løsning: Vi lar hashfunksjonen via en katalog angi hvilken diskblokk et element x befinner seg i (hvis det finnes). Dermed trenger find(x) bare to diskaksesser (og bare en aksess dersom katalogen kan lagres i internminnet). x Inntil M elementer per diskblokk hash(x)... x katalog Forelesning 4.9.2006 Ark 3 av 32 Forelesning 4.9.2006 Ark 4 av 32

I diskblokken lagrer vi for hvert element denbinærestrengensomkoder hashverdien til elementet. innmaten i elementet eller en peker til denne. Vi benytter de D første bitene av hashverdien til oppslag i katalogen. M=4 D=2 000100 001000 001010 001111 00 01 010101 10 11 111000 110101 I eksemplet over forenkler vi litt og lagrer for hvert element bare hashverdien til elementet (som 6-sifret binærtall). Katalogen har 2 D indekser. Hver diskblokk har plass til M elementer. For hver diskblokk L lagrer vi et tall d L D. Invariant: Det garanteres at alle elementente i L har minst de d første bitene felles. Dersom d L = D vil akkurat én indeks i katalogen peke på diskblokk L. Dersom d L < D viltoellerflere indekser i katalogen peke på L. Forelesning 4.9.2006 Ark 5 av 32 Forelesning 4.9.2006 Ark 6 av 32 Innsettingsalgoritme 1. Beregn hash(x) og finn riktig diskblokk L ved å slå opp i katalogen på de D første sifrene i hashverdien. 2. Hvis det er færre enn M elementer i L, så sett x inn i L. 3. Hvis diskblokken derimot er full, så sammenlign d L med D: (a) Dersom d L < D, splitter vi L i to blokker L 1 og L 2 : i. Sett d L1 = d L2 = d L + 1. ii. Gå gjennom elementene i L og plasser dem i L 1 eller L 2 avhengig av verdien på de d L + 1 første sifrene. iii. Prøv å igjen å sette inn x (gå til punkt 2). (b) Dersom d L = D: i. Doble katalogstørrelsen ved å øke D med 1. ii. Fortsett som ovenfor (splitt L i to blokker osv.). Eksempel M = 4 (maks. 4 elementer i en diskblokk) Antall bits i hashverdiene = 6 M=4 D=2 000100 001000 001010 001111 00 01 010101 10 11 111000 110101 Sett inn element med hashverdi 011000 Det er ledig plass i diskblokken, så vi setter rett inn. Forelesning 4.9.2006 Ark 7 av 32 Forelesning 4.9.2006 Ark 8 av 32

Sett inn 101011 Diskblokk 101 er full og d 101 < D, såvi splitter diskblokken: Sett inn 000011 Diskblokk 00 er full og d 00 = D, så vi utvider katalogen og splitter deretter diskblokken. Etterpå er det plass. M=4 D=3 000 001 010 011 100 101 110 111 D=3 000 001 010 011 100 101 110 111 M=4 d=3 000100 000011 d=3 001000 001010 001111 010101 011000 d=3 d=3 111000 110101 Diskblokk 101 er fortsatt full, så vi må øke D til 4 og splitte en gang til. d=3 000100 000011 d=3 001000 001010 001111 010101 011000 111000 110101 D=4... 1000 1001 1010 1011... M=4 d=3 d=4 d=4 101011 Merk! Algoritmen virker ikke hvis det er mer enn M elementer som hasher til samme verdi. Forelesning 4.9.2006 Ark 9 av 32 Forelesning 4.9.2006 Ark 10 av 32 Fyllingsgrad til diskblokkene Katalogen blir veldig stor dersom mange elementer har mange ledende sifre felles. Får å få (forhåpentligvis) god spredning bruker vi hashfunksjon i stedet for å bruke nøkkelen til elementet direkte. Hvis vi antar uniform fordeling av bitmønstrene, er antall diskblokker N M log 2 e = N M 1 ln 2 Forventet antall elementer pr. diskblokk: N N M 1 ln 2 = N M N ln 2 1 = M ln 2 = 0.693M dvs. at i det lange løp vil ca. 69% av hver diskblokk være fylt opp. Forventet størrelse på katalogen er B-trær En annen type søketrær. Brukes først og fremst når ikke hele treet får plass i internminnet. Harstorbredde(hvernodehar mange barn) og er balansert. De øverste nivåene (iallfall rotnoden) lagres i internminnet, resten på disk. Brukes særlig i databasesystemer. N 1+ 1 M M dvs. at liten M gir stor katalog. Forelesning 4.9.2006 Ark 11 av 32 Forelesning 4.9.2006 Ark 12 av 32

Definisjon: B-trær av orden M 1. Alle 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. Alle andre interne noder har mellom M/2 og M barn. 5. Alle 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-treavorden3(ogsåkaltet2-3tre): 16 22 41 8,11,12 16,17 22,23,31 41,52 Her er M = 3 og L = 3. Vi forenkler tegningene litt: 41:58 58 58,59,61 8,11,12 16,17 22,23,31 41,52 58,59,61 Forelesning 4.9.2006 Ark 13 av 32 Forelesning 4.9.2006 Ark 14 av 32 Innsetting av element x Søking etter element x 1. Start i roten. 2. Så lenge vi ikke er i en bladnode: La nøkkel-verdiene bestemme hvilket barn vi skal gå til. 3.Letetterxibladnoden. 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: Sett inn 18 i treet i eksempelet over. 22:- 16:- 22:- 16:- 41:58 8,11,12 16,17, 18 22,23,31 41,52 58,59,61 Forelesning 4.9.2006 Ark 15 av 32 Forelesning 4.9.2006 Ark 16 av 32

3. Dersom bladnoden er full, deler vi den i to og fordeler de L + 1 nøklene jevnt på de to nye bladnodene. Eksempel: Sett 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: Sett inn 19 i treet på forrige foil. 22:- 16:22 11:16 41:58 11: - 18:- 41:58 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 4.9.2006 Ark 17 av 32 Forelesning 4.9.2006 Ark 18 av 32 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: Sett inn 28 i treet på forrige foil. Sletting: eksempel Fjern først 17, deretter 23 fra følgende tre: 22:41 22:- 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 4.9.2006 Ark 19 av 32 Forelesning 4.9.2006 Ark 20 av 32

Sletting 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: Slett roten, og la barnet bli ny rot. (Treet krymper nå ett nivå.) 6. Husk å oppdatere nøkkelverdiene underveis! Forelesning 4.9.2006 Ark 21 av 32 Tidsforbruk Vi antar at M og L er omtrent like. Siden hver interne node unntatt roten har minst M/2 barn, er dybden til et B-tre maksimalt log M/2 N. På 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). Så innsetting og sletting kan ta O(M log M/2 N)=O( log M M ) log N) tid. Forelesning 4.9.2006 Ark 22 av 32 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. Siden 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. Analyser viser at B-trær blir ln 2 = 69% fulle (samme fyllingsgrad som utvidbar hashing). Forelesning 4.9.2006 Ark 23 av 32 Forelesning 4.9.2006 Ark 24 av 32

Abstrakte datatyper En ADT består av: et sett med objekter spesifikasjon av operasjoner på disse Eksempler: ADT: binært søketre Operasjoner: Innsetting, søking, fjerning,... ADT: mengde Operasjoner: union, snitt, finn,... ADT: stakk Operasjoner: push, pop, top,... Hvorfor bruke ADTer? ADTer skiller det som er viktig (funksjonaliteten) fra detaljene (den konkrete implementasjonen). Dermed kan vi: Gjenbruke ADTen i andre programmer. Enklere overbevise oss om at programmet er riktig. Forandre innmaten (kodingen) av ADTen uten å forandre resten av programmet fordi grensesnittet er det samme. Lage modulære programmer. IJavaerdetnaturligåspesifisereen ADT som et interface. Forelesning 4.9.2006 Ark 25 av 32 Forelesning 4.9.2006 Ark 26 av 32 Lister, stakker og køer Lister (kap. 3.2) A 1, A 2, A 3,..., A n Stakker (kap. 3.3) Stakker En variant av lister, der vi bare har lov til å sette inn og slette elementer fra en bestemt ende av listen. public interface StakkInterface { /* 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(); /* Sjekke 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 4.9.2006 Ark 27 av 32 Forelesning 4.9.2006 Ark 28 av 32

Array-implementasjon 4 3 2 1 0 A4 A3 A2 A1 S public void push(object x) { stakktopp++; S[stakkTopp] = x; } stakktopp Pekerkjede-implementasjon S A4 A3 A2 A1 Innsetting og sletting vil da normalt skje på begynnelsen av listen: public void pop() { stakktopp--; } public Object top() { return S[stakktopp]; } I tillegg: eventuell feilhåndtering. Forelesning 4.9.2006 Ark 29 av 32 Forelesning 4.9.2006 Ark 30 av 32