Mm8: Hash tables, Hashing and binary search trees - November 7, 2008

Relaterede dokumenter
Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO) Mm8: Hash tables og Hashing - November 10, 2010

Mm7: A little bit more about sorting - and more times for exercises - November 4, 2008

Hashing. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Philip Bille

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO), Jimmy Jessen Nielsen (JJE) Mm3: More about recurrences - October 10, 2008

Hashing. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Philip Bille

Hashing. Hashing. Ordbøger. Ordbøger. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Ordbøger Hægtet hashing Hashfunktioner Lineær probering

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO), Jimmy Jessen Nielsen (JJE) Mm2: Rekursive algoritmer og rekurrens - October 10, 2008

Mm6: More sorting algorithms: Heap sort and quick sort - October 29, 2008

Hashing. Hashing. Ordbøger. Ordbøger. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Ordbøger Hægtet hashing Hashfunktioner Lineær probering

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO) Mm2: Rekursive algoritmer og rekurrens - October 12, 2010

Grundlæggende Algoritmer og Datastrukturer. Hashing [CLRS, kapitel ]

1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer

Datastrukturer (recap)

Datastrukturer (recap)

Gerth Stølting Brodal. Hashing [CLRS, kapitel ]

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

Datastrukturer (recap) Datastruktur = data + operationer herpå

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

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

Mm4: Greedy algorithms, backtracking and more recurrences - October 21, 2008

Mm1: Introduction to analysis and design of algorithms - October 7, 2008

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (key, nøgle) for dataelementer.

Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer.

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

Introduktion til datastrukturer

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt.

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Merging og Hashing (del I)

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

Mm5: Counting, probabilities and randomized algorithms - Oktober 24, 2008

Danmarks Tekniske Universitet

Eksamen i softwareudvikling

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

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET EKSAMEN. Grundkurser i Datalogi. Algoritmer og Datastrukturer 1 (2003-ordning)

DM02 Kogt ned. Kokken. Januar 2006

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

Introduktion til datastrukturer. Philip Bille

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen (bemærk at log n betegner totals logaritmen): n 2 (log n) 2 2.

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO), Jens Myrup Pedersen (JMP) Mm4: Sorting algorithms - October 23, 2009

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n n (log n) 2. n 2 + log n 3 n. n n (log n)

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

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO) Mm1: Introduction to analysis and design of algorithms - October 11, 2010

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

Grundlæggende køretidsanalyse af algoritmer

Danmarks Tekniske Universitet

DM507 - Algoritmer og datastrukturer

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Hashing og hashtabeller

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 5n 4. logn. n 4n 5 n/logn. n n/logn 5n

Danmarks Tekniske Universitet

Hashing og hashtabeller

Danmarks Tekniske Universitet

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Danmarks Tekniske Universitet

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

Opgave 1 (10%) I det følgende angiver log n 2-tals-logaritmen af n. Ja Nej. n+3n er O(2n)? n 6 er O(n 5 )? nlogn er O(n 2 /logn)? 4n 3 er O(3n 4 )?

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Danmarks Tekniske Universitet

Database optimering - Indeks

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

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

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

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 2 n (log n) 2. 3 n /n 2 n + (log n) 4

Danmarks Tekniske Universitet

Spilstrategier. 1 Vindermængde og tabermængde

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 23n log n. 4 n (log n) log n

Talteoriopgaver Træningsophold ved Sorø Akademi 2007

Danmarks Tekniske Universitet

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Danmarks Tekniske Universitet

Prioritetskøer og hobe. Philip Bille

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

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Køreplan Matematik 1 - FORÅR 2005

DMX styring med USB-interface

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Danmarks Tekniske Universitet

Algoritmedesign med internetanvendelser ved Keld Helsgaun

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Danmarks Tekniske Universitet

Algorithms & Architectures I 2. lektion

TALTEORI Ligninger og det der ligner.

Danmarks Tekniske Universitet

sætning: Hvis a og b er heltal da findes heltal s og t så gcd(a, b) = sa + tb.

Prioritetskøer. Prioritetskøer. Prioritetskøer. Prioritetskøer

Prioritetskøer. Prioritetskøer Træer og hobe Repræsentation af hobe Algoritmer på hobe Hobkonstruktion Hobsortering. Philip Bille

Prioritetskøer. Prioritetskøer. Prioritetskøer. Prioritetskøer

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

DATALOGISK INSTITUT, AARHUS UNIVERSITET

1. Opret følgende flade database, find selv passende datatyper. 2. Opret begrænsningerne på datatyperne, du ser fx fornavn maks 25 tegn

Transkript:

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO), Jimmy Jessen Nielsen (JJE) Mm8: Hash tables, Hashing and binary search trees - November 7, 2008 1

Algorithms and Architectures II 1. Introduction to analysis and design of algorithms(rlo) 2. Recursive algorithms and recurrences (RLO) 3. More about recurrences (RLO) 4. Greedy algorithms, backtracking and more recurrences(rlo) 5. Counting, probabilities and randomized algorithms (RLO) 6. More sorting algorithms: Heap sort and quick sort (RLO) 7. A little bit more about sorting - and more times for exercises (RLO) 8. Hash tables, hashing and binary search trees (RLO) 9. Binary search trees, red-black trees (JJE) 10. Red-black trees continued + string matching (JJE) 2

Dagsorden Introduktion og baggrund Direkte adressering Hashing konceptet Kollision og kollisionsundvigelse af hash værdier Hash funktioner Divisions og multiplikations metoder Universel hashing Åben adressering Lineær, kvadratisk probing Dobbelt hashing Perfekt hashing Opsummering og konklusion Opgaver 3

Direkte adresserings tabeller Direkte adressering er simpelt Search(T, k) : return T[k] Insert(T, x) : T[key[x]] = x Delete(T, x) : T[key[x]] = NIL og tager O(1) tid. Problemet opstår hvis U er enormt stort. 1 9 2 U: Sæt af mulige keys 0 4 5 3 K: Sæt af anvendte nøgler 8 6 7 T / / / / / / 0 1 2 3 4 5 6 7 8 9 Key Data 2 X 3 Y 5 Z 8 W 4

Hash tabeller Ideen er at benytte en funktion til at mappe nøgler til et sted i tabellen Et element med nøgle k, hasher til slot h(k) Et problem er dog at nøgler kan kollidere T 0 h(k 1 ) h(k 4 ) U: Sæt af mulige keys h(k 2 ) = h(k 5 ) k 1 k 4 h(k 3 ) k5 k 2 k 3 K: Sæt af anvendte nøgler m - 1 5

Et eksempel på hash tabel Nøgle John Schmidt Indeks 0 1 Nøgle - værdi par Lisa Schmidt +45 23 45 67 89 Lisa Schmidt 872 873 John Schmidt +45 12 34 56 78 Sam Doe 998 Sam Doe +45 34 56 78 90 999 6

Kollisions undvigelse ved chaining - princip Kollisioner kan undgås med sammenkædninger af keys T 0 k 1 k 4 k 6 / U: Sæt af mulige keys k 2 k 5 k 9 / k 6 k 4 k 1 k9 k 5 k 2 k 3 k 7 k 8 K: Sæt af anvendte nøgler k 3 / k 7 k 8 / 7

Kollisions undvigelse ved chaining - operationer Chained hash insert(t, x) indsæt x ved slutningen af listen T[h(key[x])] k 1 k 4 k 6 / Tager O(1) tid, medmindre der kontrolleres for redundante elementer, for hvilket der skal udføres et søge kald først Chained hash delete(t, x) sletning af x fra listen T[h(key[x])] Tager O(1) tid hvis dobbelt linked, ellers tager den samme tid som søgning 8

Load faktor for chained hash tabeller Definer load faktoren α = n/m, dvs. et udtryk for hvor fyldt hash tabellen er på et givet tidspunkt Chained hash search(t, k) Søgning efter element med nøgle k i liste T[h(k)] Værste søgetid er givet ved E[X ij ]=1+ (α/2)(n-1)/n (hvorfor tager vi lige på tavlen) Det kan også udtrykkes som Θ(1+α) Ved n = O(m) har vi α = O(m)/m = O(1), og dermed hvis tabellens størrelse er propertional med antallet af elementer i tabellen, er søgetiden O(1), i.e. tager i gennemsnit konstant tid 9

Praktisk eksempel med chaining Nøgle John Schmidt Lisa Schmidt Sandra Dee Sam Doe Indeks 0 1 872 873 998 999 Nøgle - værdi par Lisa Schmidt +45 23 45 67 89 John Schmidt +45 12 34 56 78 Sandra Dee +45 99 99 99 99 Sam Doe +45 34 56 78 90 10

Dagsorden Introduktion og baggrund Direkte adressering Hashing konceptet Kollision og kollisionsundvigelse af hash værdier Hash funktioner Divisions og multiplikations metoder Universel hashing Åben adressering Lineær, kvadratisk probing Dobbelt hashing Perfekt hashing Opsummering og konklusion Opgaver 11

Hash funktioner Hvad er en god hash funktion? og nej, det er ikke en der ryger. En god hash funktion er karakteriseret ved at give nøglerne lige sandsynlighed for at hashe til en af de m slots i tabellen Vi får en tendens til at have meget korte kædede lister for at undgå kollision Omvendt har en dårlig hash funktion en tendens til at hashe til samme område i tabellen. Vi får en tendens til meget lange kædede lister for at undgå kollision Der findes flere standard metoder/hash funktioner som vi gennemgår i de følgende slides Bemærk: de fleste hash funktioner anvender naturlige tal, dvs. N={0, 1, 2, } Evt. kan strenge laves om til naturlige tal vha. tværprodukt af ascii værdier 12

Divisionsmetoden Ved divisions metoden mapper vi nøglen k ind i en af de m slots ved at tage rest delen af divisionen mellem k og m, dvs. h(k) = k mod m f.eks. med m = 12, er h(100) = 100 mod 12 = 4 h(101) = 101 mod 12 = 5 h(112) = 112 mod 12 = 4 Bemærk det cykliske i dette eksempel!! 13

Divisionsmetoden #2 Ved divisions metoden prøver vi at undgå bestemte værdier af m m bør ikke være en toer potens, således m = 2 p, fordi h(k) i det tilfælde blot vil være de mindste bits af k. Dermed er antallet af effektive talværdier for k reduceret væsentlig. En bedre værdi vil være et tal der ikke er tæt på denne. F.eks. n = 2000 karakter strenge med hver karakter på 8 bit er et valg på m = 701 elementer et ok valg. Det er et primtal tæt på 2000/3 og ikke tæt på nogen værdi af 2 p. h(k) = k mod 701 14

Multiplikationsmetoden Multiplikationsmetoden baserer sig på først at gange nøglen k med en konstant A i området 0 < A < 1 og derefter tage divisions resten af ka : h(k) = m(ka mod 1), med ka mod 1 = ka - ka En fordel er at værdien m ikke er kritisk for at opnå en god hash funktion Typisk valg er m = 2 p for et givet heltal p Antag w er ord størrelsen på en given maskine, og k bit passer ind i et ord Vi begrænser A til at være på formen s/2 w med s værende et heltal i området 0 < s < 2 w 15

Multiplikationsmetoden w bits k X S = A 2 w r 1 r 0 p bits h(k) Den ønskede p længde hash værdi, findes i øverst betydende bit af r 0 Metoden virker for alle gyldige A, men nogle værdier ser ud til at virke bedre end andre, Knuth [185] foreslår at A ( 5-1)/2 0.6180339887. 16

Universel hashing H: Sæt af mulige hash funktioner h 1 h 2 h3 h 4 h 6 h5 Et problem er at suspekte typer kan vælge n nøgler der tvinger søge tiden ud i værste tilfælde Θ(n) Universal hashing går ud på at vælge en tilfældig hash funktion fra en gruppe af snedig designet hash funktioner H. k 1 Tilfældige hash funktioner sikrer at vi ikke ender i værste tilfælde Hashing kollision undåes ved chaining k 1 U: Sæt af mulige keys k 6 k9 k 4 k 7 k 8 K: Sæt af anvendte nøgler k 5 k 2 k 3 k 2 k 3 / k 7 17

Design af universelle hash funktioner Vælg et primtal p stort nok til at enhver mulig nøgle k er i området 0 til p - 1 Lad Z p være sættet {0, 1,., p - 1} Lad Z p * være sættet {1, 2,, p - 1} Vi antager samtidig at Antallet af mulige nøgler er større en slots i tabellen, p > m Vi definerer en hash funktion h a,b, med a Z p og b Z p * h a,b (k) = ((ak+b) mod p) mod m F.eks. med p = 17 og m =6, vil h 3,4 (8) = 5 Familien af sådanne funktioner betegner vi H p,m = {h a,b : a Z p og b Z p* } og kan vises at være universelle 18

Dagsorden Introduktion og baggrund Direkte adressering Hashing konceptet Kollision og kollisionsundvigelse af hash værdier Hash funktioner Divisions og multiplikations metoder Universel hashing Åben adressering Lineær, kvadratisk probing Dobbelt hashing Perfekt hashing Opsummering og konklusion Opgaver 19

Åben adressering En anden måde at overkomme hash kollisioner på kaldes åben adressering Ved åben adressering er elementer gemt i selve hash tabellen En par ulemper er dog At hash tabellen nemt kan fyldes op -> hash table overflow At sletning ikke er en simpel opgave fordi et slettet og tomt element er umiddelbare ens. En løsning er at indsætte gravsten på de slettede poster Nøgle John Schmidt Indeks 0 1 Nøgle - værdi par - - Lisa Schmidt +45 23 45 67 89 Lisa Schmidt 872 Probing efter næste element John Schmidt +45 12 34 56 78 873 Sandra Doe Sandra Doe +45 33 44 55 66 Sam Doe 998 999 Sam Doe +45 34 56 78 90 - - 20

Lineær probing Givet en ordinær hash funktion h : U {0, 1,, m - 1}, i bogen også kaldet auxillery hash funktion, kan den lineære probing skrives som h(k, i) =(h (k) + i) mod m Givet en nøgle k, er det første slot undersøgt T[h (k)] Dernæst er slot T[h (k) + 1], T[h (k) + 2],, T[m - 1] undersøgt Metoden er nem at implementere men lider af såkaldt Primary Clustering Lange køer af udfyldte slots dannes over tid, hvilket forøger den gennemsnitlige søge tid Clusters opstår fordi et tomt slot, efterfulgt af i udfyldte slot bliver udfyldt med sandsynligheden (i + 1)/m 21

Kvadratisk probing Kvadratisk probing baserer sig på en hash funktion af typen h(k, i) = (h (k) + c 1 i + c 2 i 2 ) mod m Initierende hash værdi efterprøvet er således T[h (k)] og efterfølgende T[h (k) + f(i, i 2 )] Denne virker bedre end lineær probing, dog virker den ikke godt hvis to nøgler har samme initierende hash (samme problem har lineær probing dog også) h(k 1,0) = h(k 2, 0) => h(k 1, 1) = h(k 2, 1) lider den af Secundary Clustering der er som Primary Clustering blot tendensen er svagere 22

Dobbelt hashing Dobbelt hashing har formen h(k, i) = (h 1 (k) + ih 2 (k)) mod m Den initierende aflæste værdi findes i T[h 1 (k)] og efterfølgende værdier er offsettet med i h 2 (k) mod m Dobbelt hashing er bedre end de andre metoder i den forstand at der dannes Θ(m 2 ) probe sekvenser og ikke Θ(m) sekvenser som for den lineære/kvadratiske metode Hvert hash par (h 1 (k), h 2 (k)) leder til en forskellig probe sekvens 23

Eksempel med dobbelt hashing h(k, i) = (h 1 (k) + i h 2 (k)) mod 13 h 1 (k) = k mod 13 h 2 (k) = k mod 11 Først h(79, 0) = 1 Hvad med h(69, 0) = 4 Og med h(72, 0) = 7 Nu bliver det tricky: h(98, 0) = 7 Er optaget, så vi prøver h(98, 1) = 5 Og h(14, 0) = 1 Hmm.. h(14, 1) = 5 Og videre h(14, 2) = 9 Med h(50, 0) = 11 0 1 2 3 4 5 6 79 69 98 7 8 9 10 11 12 72 14 50 24

Et par tip til design af dobbelt hash funktioner Et godt valg af h 2 (k) kræver at værdierne dannet er relative primes i forhold til hash tabellens størrelse Relative primes: to heltal der ikke deler nogen fælles positiv divisor, med undtagelsen af tallet 1 En måde at opnå dette er at lade m optræde som en toer potens, dvs. m = 2 p og sikre h 2 (k) altid returnerer et ulige tal En anden måde at vælge sine dobbelt funktioner er h 1 (k) = k mod m h 2 (k) = 1 + (k mod m ) Her er m et primtal og m er et lidt mindre tal, f.eks. m = m - 1 25

Analyse af dobbelt hashing Med åben adressering har vi højest et element per slot i hash tabellen, dvs. at n m, og dermed α 1 (husk at α = n/m) Lad os definere X til at være antallet af forsøg vi gør os ved en mislykket søgning, og Y til at være antallet af forsøg vi gør os ved en succesfuld søgning Resten tager vi på tavlen Og dermed er vores forventet antal af forsøg ved et mislykket søgning givet ved: E[X] = 1/(1-α) Ved lignende, men lidt mere omfattende bevisførelse kan vi vise at det forventede antal forsøg for en succesfuld søgning er E[Y] = (1/α)ln(1/(1-α)) 26

Perfekt hashing En yderligere metode er anvendelse af statiske nøgler Når nøglerne en gang er gemt i tabellen, ændres de ikke! Eksempler Reserverede ord i et programmeringssprog Filnavne på en CD - ROM Hvis kravet om hukommelse er O(1) anvender vi også perfekt hashing Den basal ide er at anvende et to-niveau hashing system med anvendelse af universel hashing på hvert niveau Første niveau er essentiel hashing med chaining Andet niveau er en række-individuel hash funktion 27

0 1 2 3 4 5 6 7 8 Eksempel T m 0 a 0 b 0 s 0 1 0 0 10 / / / / / m 2 9 10 18 / / / 60 72 / / 75 / m 5 1 0 0 70 m 7 a 2 a 5 a 7 b 2 b 5 b 7 16 23 88 / / / / / / / 40 52 22 Perfekt hashing til at gemme sættet K={10, 22, 37, 40, 52, 60, 70, 72, 75} s 5 s 2 s 7 / / / / 37 / 28

Valg af hash funktioner der garanterer kollisionsfri hashing Ved forsigtig valg af hash funktioner, kan vi garantere der ikke er nogen kollisioner på andet niveau, hvilket er hvad vi har brug for! Vi benytter os af en hashfunktion fra H, og hvis vi vælger m = n 2, så kan vi vise at der er stor sandsynlighed for at undgå kollision (den er mindre en 50%) Man skal måske prøve et par gange, men husk at K er statisk! For primær hash tabel benytter vi af de universelle hashfunktioner H p,m, med p værende et primtal større end den største nøgle For den sekundære hash tabel benytter vi en af de universelle hashfunktioner H p,mj Med n j = m j = 1 har vi ikke brug for slot j, og vi kan derfor benytte a = b = 0 29

Surprice. Geohashing! 30

Dagsorden Introduktion og baggrund Direkte adressering Hashing konceptet Kollision og kollisionsundvigelse af hash værdier Hash funktioner Divisions og multiplikations metoder Universel hashing Åben adressering Lineær, kvadratisk probing Dobbelt hashing Perfekt hashing Opsummering og konklusion Opgaver 31

Opsummering og konklusion Hash tabeller er en smart måde at organisere sin data på i hukommelsen, med en hurtig søgetid O(1) Kræver relativ lidt hukommelse i forhold til direkte adressering Hash tabeller kræver hash funktioner, hvis primære formål er at mappe nøgler til tabelelementer En god hash funktion leder til få kollisioner Nogle metoder at overkomme kollisioner på er ved Chaining: anvendelse af linked lister på bekostning af søgetid, associeret til de enkelte tilgange i hash tabellen Åben adressering: der baserer sig på at holde data indenfor hash tabellen. Her bruger vi så probing til tilgang af kollideret data. Lineær og kvadratisk probing giver tendens til gruppering af data, men er anvendelige Dobbelt hashing er en god måde at overkomme problemer med gruppering af data Perfekt hashing kan anvendes med fordel når vi har med statiske nøglesæt at gøre 32

Dagsorden Introduktion og baggrund Direkte adressering Hashing konceptet Kollision og kollisionsundvigelse af hash værdier Hash funktioner Divisions og multiplikations metoder Universel hashing Åben adressering Lineær, kvadratisk probing Dobbelt hashing Perfekt hashing Opsummering og konklusion Opgaver 33

Opgaver Opgave 11.2-2 Opgave 11.3-1, 11.3-4 Opgave 11.4-1 Implementer en hash tabel der anvender åben adressering, og som kan håndtere HASH - DELETE korrekt, samt sikre at HASH - INSERT håndtere slettet data korrekt. Se evt. opgave 11.4-2 34