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



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

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

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.

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

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

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

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

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

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

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. Prioritetskøer. Prioritetskøer. Prioritetskøer

TALTEORI Wilsons sætning og Euler-Fermats sætning.

Hashing og hashtabeller

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

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

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)

Danmarks Tekniske Universitet

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

Danmarks Tekniske Universitet

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

Eksamen i softwareudvikling

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

Datastrukturer (recap)

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

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

TALTEORI Wilsons sætning og Euler-Fermats sætning.

Datastrukturer (recap)

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

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

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

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

Danmarks Tekniske Universitet

Datastrukturer (recap) Datastruktur = data + operationer herpå

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

Prioritetskøer og hobe. Philip Bille

Introduktion til datastrukturer. Philip Bille

Hashing og hashtabeller

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.

Mindste udspændende træ

TALTEORI Primfaktoropløsning og divisorer.

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

Introduktion til datastrukturer

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

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

Grafteori, Kirsten Rosenkilde, september Grafteori

Danmarks Tekniske Universitet

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

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

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

Skriftlig Eksamen Algoritmer og Sandsynlighed (DM538)

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

Danmarks Tekniske Universitet

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

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Danmarks Tekniske Universitet

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

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

Christer Vindberg & Kim Birkelund. Avancerede Algoritmer og. Datastrukturer. Projekt 1

Secret Sharing. Olav Geil Institut for Matematiske Fag Aalborg Universitet URL: olav.

Analyse 1, Prøve juni r+1. Men vi har øjensynligt, at 2. r r+1

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

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

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

Sådan benytter du HOTLINEs ServiceDesk (SD)

Skriftlig Eksamen Algoritmer og Datastrukturer 2 (2003-ordning)

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

DM507 - Algoritmer og datastrukturer

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

Mindste udspændende træ

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

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

DM02 opgaver ugeseddel 2

Python 3 Matematik Programmerings kursus:

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

Eksamensspørgsmål Mat C maj-juni E. TWE

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

Oprettelse af Aktivitet

Merging og Hashing (del I)

Start med at vælge hvilken afdeling der skal laves ændringer i f.eks. fodbold.

CD-DIRECT Eksport til MS-Office

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

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

Funktionalligninger - løsningsstrategier og opgaver

Abstrakte datatyper C#-version

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

Indberetning af en ny lokalplan

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Rediger eller opret institutionsmedarbejder på en ungdomsuddannelse

Matematisk modellering og numeriske metoder. Lektion 18

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

DM02 Kogt ned. Kokken. Januar 2006

Danmarks Tekniske Universitet

Transkript:

Philip Bille. 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. Anvendelser. Grundlæggende datastruktur til at repræsentere en mængde. Bruges i mange algoritmer og datastrukturer. Eksempel. U = {,..,} key(s) = {,,,,,, } U key(s)

Udfordring. Hvordan kan vi løse problemet med nuværende teknikker? Løsning med hægtet liste. Gem S i hægtet liste. head 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. SEARCH i O(n) tid. INSERT og DELETE i O() tid. Plads. O(n). 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. SEARCH, INSERT og DELETE i O() tid. Plads. O( U ) A Datastruktur SEARCH INSERT DELETE Plads hægtet liste O(n) O() O() O(n) direkte addressering O() O() O() O( U ) Udfordring. Kan vi gøre det betydeligt bedre?

Hægtet hashing Ide. Find en hashfunktion h : U {,..., m-}, hvor m = Θ(n). Hashfunktion skal fordele nøglerne fra S nogenlunde jævnt over {,..., m-}. = forkludre, sprede, bikse. (chained hashing). Vedligehold tabel A[..m-]. Element x gemt i hægtet liste på A[h(x.key)]. Kollision. x og y kolliderer hvis h(x.key) = h(y.key). 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 = {,..,} key(s) = {,,,,,, } m = h(k) = k mod Hægtet hashing 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)]. 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 =,,,,,,,, i en hashtabel af størrelse vha. hægtet hashing med hashfunktionen h(k) = k mod. SEARCH i O(længde af liste) tid. INSERT og DELETE i O() tid. Længde af lister er afhængig af hashfunktion. Plads. O(m + n) = O(n). U = {,..,} key(s) = {,,,,,, } m = h(k) = k mod

Uniform hashing Def. Belastningsfaktor (load factor) α = n/m = gennemsnitlig længde af lister. m = Θ(n) α = O(). Simpel uniform hashing. Antag at hvert element afbildes uniformt tilfældigt i A. Forventet længde af liste = α. forventet tid for SEARCH er O() SEARCH i O() forventet tid. INSERT og DELETE i O() tid. Datastruktur SEARCH INSERT DELETE Plads hægtet liste O(n) O() O() O(n) direkte addressering O() O() O() O( U ) hægtet hashing O() O() O() 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? U = {,..,} key(s) = {,,,,,, } m = h(k) = k mod 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 < Z <.

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": forskellige ASCII-koder for bogstaver. C =, L =, R = og S =. "CLRS" = + + + = 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 k k i U skal Pr[h(k) = h(k)] /m. Eksempel. ha,b(k) = (ak + b mod p) mod m for primtal p H = {ha,b(k) a {,.., p-}, b {,..., p-}} Andre objekter. Definer hashfunktion baseret på datafelter. Universel hashfunktion Hægtet hashing i O() forventet tid uden antagelse om uniform hashing. Kun afhængig af tilfældigt valg fra H. Anvendelser. Kodning, kryptografi, similaritet, geometri,...

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. h(k) = k mod Lineær probering Caching. Lineær probering er meget cache-effektivt. Klumpning (clustering). Nøgler har en tendens at "klumpe" sammen. h(k) = k mod Theorem. Simpel uniform hashing forventede antal proberinger = /( - α). 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 vs. hægtet hashing. Åben addressering Åben addressering (open addressing).. Kvadratisk probering. Dobbelt hashing. http://en.wikipedia.org/wiki/hash_table