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

Relaterede dokumenter
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

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

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

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

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

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

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

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

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

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

Prioritetskøer og hobe. Philip Bille

Danmarks Tekniske Universitet

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

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

Introduktion til datastrukturer. Philip Bille

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

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

Introduktion til datastrukturer

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 )?

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

Datastrukturer (recap)

Danmarks Tekniske Universitet

Datastrukturer (recap)

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

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

Datastrukturer (recap) Datastruktur = data + operationer herpå

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

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

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.

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

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

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: 7 n 1/ log n. (log n) 4

Eksamen i softwareudvikling

Hashing og hashtabeller

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

Danmarks Tekniske Universitet

DM507 - Algoritmer og datastrukturer

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

Danmarks Tekniske Universitet

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

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

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

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

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

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

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

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

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

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

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

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Orienterede grafer. Orienterede grafer. Orienterede grafer. Vejnetværk

Hashing og hashtabeller

Danmarks Tekniske Universitet

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Danmarks Tekniske Universitet

Mindste udspændende træ. Mindste udspændende træ. Introduktion. Introduktion

Danmarks Tekniske Universitet

Mindste udspændende træ. Mindste udspændende træ. Introduktion. Introduktion

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

Mindste udspændende træ

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.

Danmarks Tekniske Universitet

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

DATALOGISK INSTITUT, 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 n (log n) 2. n 2 + log n 3 n. n n (log n)

Skriftlig Eksamen Algoritmer og Sandsynlighed (DM538)

Danmarks Tekniske Universitet

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

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

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

Orienterede grafer. Orienterede grafer. Orienterede grafer. Orienterede grafer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Søgning og Sortering. Philip Bille

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

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Orienterede grafer. Introduktion Repræsentation Søgning Topologisk sortering og DAGs Stærke sammenhængskomponenter Implicitte grafer.

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

Søgning og Sortering. Søgning og Sortering. Søgning. Linæer søgning

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet. Mandag den 22. marts 2004, kl

DM507 Algoritmer og datastrukturer

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

Mindste udspændende træ

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

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Danmarks Tekniske Universitet

Transkript:

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

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

Ordbøger Ordbøger. Vedligehold en dynamisk mængde S af elementer. Hvert element har en nøgle x.key fra et univers af nøgler U og satellitdata x.data. Ordbogsoperationer. SEARCH(k): afgør om element med nøgle k findes i S, og returner elementet. INSERT(x): tilføj x til S (vi antager x ikke findes i forvejen) DELETE(x): fjern x fra S. Eksempel. U = {0,..,99} key(s) = {1, 13, 16, 41, 54, 66, 96} U key(s)

Ordbøger Anvendelser. Grundlæggende datastruktur til at repræsentere en mængde. Bruges i mange algoritmer og datastrukturer.

Ordbøger Udfordring. Hvordan kan vi løse problemet med nuværende teknikker?

Ordbøger Løsning med hægtet liste. Gem S i hægtet liste. head 66 54 1 96 16 41 13 SEARCH(k): lineær søgning i listen efter nøgle k. INSERT(x): Indsæt x i start af liste. DELETE(x): fjern x fra liste. Tid. SEARCH i O(n) tid. INSERT og DELETE i O(1) tid. Plads. O(n).

Ordbøger Løsning med direkte addressering (direct addressing). Gem S i tabel A af størrelse U. Gem element x på position A[key[x]] SEARCH(k): returner A[x.key]. INSERT(x): Sæt A[x.key] = x. DELETE(x): Sæt A[x.key] = null. Tid. SEARCH, INSERT og DELETE i O(1) tid. Plads. O( U ) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 A 1 13 16

Ordbøger Datastruktur SEARCH INSERT DELETE Plads hægtet liste O(n) O(1) O(1) O(n) direkte addressering O(1) O(1) O(1) O( U ) Udfordring. Kan vi gøre det betydeligt bedre?

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

Hægtet hashing Ide. Find en hashfunktion h : U {0,..., m-1}, hvor m = Θ(n). Hashfunktion skal fordele nøglerne fra S nogenlunde jævnt over {0,..., m-1}. Hashing = forkludre, sprede, bikse. 0 Hægtet hashing (chained hashing). Vedligehold tabel A[0..m-1]. Element x gemt i hægtet liste på A[h(x.key)]. Kollision. x og y kolliderer hvis h(x.key) = h(y.key). 1 2 3 4 5 6 7 15 41 1 13 54 66 16 96 SEARCH(k): lineær søgning i liste A[h(k)] efter nøgle k. INSERT(x): Indsæt x i start af liste A[h(x.key)]. DELETE(x): fjern x fra liste A[h(x.key)]. U = {0,..,99} key(s) = {1, 13, 16, 41, 54, 66, 96} m = 10 h(k) = k mod 10 8 9

Hægtet hashing SEARCH(k): lineær søgning i liste A[h(k)] efter nøgle k. INSERT(x): Indsæt x i start af liste A[h(x.key)]. DELETE(x): fjern x fra liste A[h(x.key)]. Opgave. Indsæt følgende nøglesekvens K = 5, 28, 19, 15, 20, 33, 12, 17, 10 i en hashtabel af størrelse 9 vha. hægtet hashing med hashfunktionen h(k) = k mod 9.

Hægtet hashing SEARCH(k): lineær søgning i liste A[h(k)] efter nøgle k. INSERT(x): Indsæt x i start af liste A[h(x.key)]. DELETE(x): fjern x fra liste A[h(x.key)]. Tid. SEARCH i O(længde af liste) tid. INSERT og DELETE i O(1) tid. Længde af lister er afhængig af hashfunktion. Plads. O(m + n) = O(n). 0 1 2 3 4 5 6 7 8 9 15 41 1 13 54 66 16 96 U = {0,..,99} key(s) = {1, 13, 16, 41, 54, 66, 96} m = 10 h(k) = k mod 10

Uniform hashing Def. Belastningsfaktor (load factor) α = n/m = gennemsnitlig længde af lister. m = Θ(n) α = O(1). Simpel uniform hashing. Antag at hvert element afbildes uniformt tilfældigt i A. Forventet længde af liste = α. forventet tid for SEARCH er O(1) Tid. SEARCH i O(1) forventet tid. INSERT og DELETE i O(1) tid. 0 1 2 3 4 5 6 7 8 9 15 41 1 13 54 66 16 96 U = {0,..,99} key(s) = {1, 13, 16, 41, 54, 66, 96} m = 10 h(k) = k mod 10

Ordbøger Datastruktur SEARCH INSERT DELETE Plads hægtet liste O(n) O(1) O(1) O(n) direkte addressering O(1) O(1) O(1) O( U ) hægtet hashing O(1) O(1) O(1) O(n) = forventet køretid med antagelse om simpel uniform hashing Udfordring. Hvad kan vi gøre uden at antage simpel uniform hashing? Findes der hashfunktioner der fordeler en mængde nøgler nogenlunde jævnt?

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

Hashfunktioner Divisionsmetoden. h(k) = k mod m, hvor m er et primtal. Primtal m fordi fælles divisorer af nøgler og m kan reducere udnyttelse af tabel. h(k) = ak mod m er lidt bedre. Multiplikationsmetoden. h(k) = m(kz - kz ), hvor Z er en konstant 0 < Z < 1.

Hashfunktioner Hashfunktioner for andet end heltal. Alt er gemt som bits og kan derfor hashes. Flydende tal. Konverter til bitrepræsentation. Strenge. Bogstaver er heltal og så streng kan konverteres til sekvens af cifre. F. eks. "CLRS": 256 forskellige ASCII-koder for bogstaver. C = 67, L = 76, R = 82 og S = 83. "CLRS" = 67 256 3 + 76 256 2 + 82 256 1 + 83 256 0 = 1129075283 Andre objekter. Definer hashfunktion baseret på datafelter.

Universel hashing Kan vi konstruere hashfunktioner med beviselige garantier uden antagelse om uniform hashing? Ide (universelle hashfunktioner). Vælg en tilfældig hashfunktion h uniformt tilfældigt fra en mængde H af funktioner der kan beskrives kompakt og beregnes hurtigt og tilfredsstiller For alle k1 k2 i U skal Pr[h(k1) = h(k2)] 1/m. Eksempel. ha,b(k) = (ak + b mod p) mod m for primtal p H = {ha,b(k) a {1,.., p-1}, b {0,..., p-1}} Universel hashfunktion Hægtet hashing i O(1) forventet tid uden antagelse om uniform hashing. Kun afhængig af tilfældigt valg fra H.

Hashing Anvendelser. Kodning, kryptografi, similaritet, geometri,...

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

Lineær probering Lineær probering (linear probing). Gem S i tabel A af størrelse m. Element x gemt i A[h(x.key)] eller i klynge (cluster) til højre for A[h(x.key)]. Klynge = fortløbende (cyklisk) sekvens af fyldte indgange. 41 1 11 13 54 98 0 1 2 3 4 5 6 7 8 9 h(k) = k mod 10 SEARCH(k): lineær søgning fra A[h(x.key)] i klynge til højre for A[h(x.key)] INSERT(x): indsæt x på A[h(x.key)]. Hvis optaget, indsæt på næste tomme indgang til højre for x. DELETE(x): fjern x fra A[h(x.key)]. Genindsæt alle elementer til højre for i klyngen.

Lineær probering Caching. Lineær probering er meget cache-effektivt. Klumpning (clustering). Nøgler har en tendens at "klumpe" sammen. 41 1 11 13 54 98 0 1 2 3 4 5 6 7 8 9 h(k) = k mod 10 Theorem. Simpel uniform hashing forventede antal proberinger = 1/(1 - α).

Lineær probering Lineær probering vs. hægtet hashing. http://en.wikipedia.org/wiki/hash_table

Åben addressering Åben addressering (open addressing). Lineær probering. Kvadratisk probering. Dobbelt hashing.

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