mm8: hash tables og hashing - november 10,...

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

Upload: others

Post on 29-Feb-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

1

Algorithms and Architectures IRasmus Løvenstein Olsen (RLO)

Mm8: Hash tables og Hashing- November 10, 2010

Page 2: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

22

Algorithms and Architectures II

1. Introduction to analysis and design of algorithms (RLO - 11/10)2. Recursive algorithms and recurrences (RLO - 12/10)3. Implementation of recursive algorithms (Self study - 25/10)4. Greedy algorithms, backtracking and recurrences (Self study - 26/10)5. Sorting algorithms (RLO - 1/11)6. Implementation of sorting algorithms (Self study - 2/11)7. Counting, probabilities and randomized algorithms (RLO - 8/11)8. Hash tables and Hashing (RLO - 10/11)9. Binary search trees, red-black trees and string matching (Self study - 15/11)10. Course round-up (RLO - 16/11)

2

Page 3: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

3

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

Page 4: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

4

Introduktion

• Context Management Framework

• Søgning efter distribuerede information en nødvendighed for funktionaliteten af et CMF

• Context Access LAnguage (CALA) blev designet til formålet

Page 5: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

5

Informations modellering

• Hver context information er udstyret med• Identifier• Type• List af attributter, der hver har

• Et navn• En værdi

BluetoothScanner1

BTDevice-001E4CFFE9D6

ID: BluetoohScanner1Type: BluetoohScannerAttributes:

seesBTAddress: 00:1E:4C:FF:E9:D6hasLocation: Position1

ID: BTDevice-001E4CFFE9D6Type: BluetoothDeviceAttributes:

isSeenBy: bluetoothScanner1hasBTAddr: 00:1E:4C:FF:E9:D6hasLocation: Position1

1

2

Page 6: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

6

Eksempel på CALA query

<?xml version="1.0" encoding="UTF-8"?><methodCall>

<methodName>CMN.request</methodName> XML-RPC container<params>

<param><value>

<cala xmlns="http://nle.nec.de/CMF" ><query>

<entityIdentifierSelector><hasIdentifier>Display1</hasIdentifier><entityType>PublicDisplay</entityType><attributeName>nearbyPerson</attributeName>

</entityIdentifierSelector><scope>

<networkScope>NODE</networkScope></scope>

</query></cala>

</value></param>

</params> XML-RPC container</methodCall>

Selector based on ID

Query only the targeted Agent

Page 7: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

7

Krav og udfordringer til søgningen

• Somme tider har man brug for informationer• Af type X og vi kender ikke/er ligeglade med identifiers, men med alle

attributter• Information med Identifier Z og med attribut G og H• Af type X og med Identifier Z med attribut H

• Hvordan kan man lave en effektiv søgning der samtidig kan kombinere/tillade ovenstående typer forespørgsel?

• Svar: Ved hashing, men hvordan?

• Ved registrering af data, indlægges forskellige kombinationer af Type, Id og attributter i en hash tabel, hvorefter hash værdien eventuelt distribueres. I og med Hashing tillader søgning på O(1) tid, kan queries håndteres påO(1) tid, selvom disse kan kombineres på mange forskellige måder.

• Prisen er øget pladsforbrug da hash nøgler skal gemmes, samt risiko for kollision….

Page 8: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

8

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

U: Sæt af mulige keys

K: Sæt af anvendte nøgler

1

9

4

0

7

6

2

5

3

8

/

/

/

/

/

/

0

1

2

3

4

5

6

7

8

9

3 Y

5 Z

8 W

2 XKey Data

T

Page 9: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

9

Et eksempel på hash tabel

John Schmidt

Lisa Schmidt

Sam Doe

0

1

872

873

998

999

John Schmidt +45 12 34 56 78

Lisa Schmidt +45 23 45 67 89

+45 34 56 78 90Sam Doe

Nøgle Nøgle - værdi parIndeks

Input

Page 10: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

10

Hash tabeller

• Ideen er at benytte en funktion til at mappenø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…

U: Sæt af mulige keys

K: Sæt af anvendte nøgler

k1

k5

k4

k2 k3

0

h(k1)

h(k4)

h(k2)

h(k3)

m - 1

T

= h(k5)!!

Page 11: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

11

Kollisions undvigelse ved chaining - princip

• Kollisioner kan undgås med sammenkædninger af keys

U: Sæt af mulige keys

K: Sæt af anvendte nøgler

k1

k9

k4

k2 k3

T

k5

k6

k7k8

k1 k4 k6 /

k2 k5 k9 /

k3 /

k7 k8 /

m slots

n elements

Page 12: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

12

Kollisions undvigelse ved chaining - operationer

• Chained hash insert(T, x)• indsæt x ved slutningen af listen T[h(key[x])]

• 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

k1 k4 k6 /

Page 13: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

13

Load faktor for chained hash tabeller

• Definer load faktoren = n/m, dvs. et udtryk for hvor fyldt hash tabellen er på et givet tidspunkt• m slots og n elementer per slot

• 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[Xij]=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

Page 14: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

14

Praktisk eksempel med chaining

John Schmidt

Lisa Schmidt

Sam Doe

0

1

872

873

998

999

John Schmidt +45 12 34 56 78

Lisa Schmidt +45 23 45 67 89

+45 34 56 78 90Sam Doe

Nøgle - værdi parIndeks

Sandra Dee+45 99 99 99 99Sandra Dee

NøgleInput

Page 15: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

15

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

Page 16: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

16

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 efterfølgende

• 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

Page 17: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

17

Simpelt eksempel på hash funktion

• Overvej CALA forespørgslen<entityIdentifierSelector>

<hasIdentifier>Display1</hasIdentifier><entityType>PublicDisplay</entityType><attributeName>nearbyPerson</attributeName>

</entityIdentifierSelector>

• Vi kan skabe strengen ”Display1.PublicDisplay.nearbyPerson” ved at fortolke XML stykket fra CALA querien

• Hvert bogstav tilsvarer en ASCII værdi, f.eks. D = 68, i = 105, s = 115 osv.• En nøgle kunne dannes ved f.eks.

• Summen af de enkelte bogstaver (eller hvert tredje)• Produktet af de enkelte bogstaver• XOR af alle tal eller andre metoder

• Problemet er at nogle metoder er svagere end andre, så hvordan får vi en ”god” metode, og hvad karakteriserer en god metode?

Page 18: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

18

DivisionsmetodenVed 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(96) = 96 mod 12 = 0• h(97) = 100 mod 12 = 1• h(98) = 101 mod 12 = 2• …• h(108) = 108 mod 12 = 0• h(109) = 109 mod 12 = 1• h(110) = 110 mod 12 = 2

• Bemærk det cykliske i dette eksempel!!

Page 19: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

19

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 = 2p, 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 2p.

• h(k) = k mod 701

Page 20: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

20

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 = 2p 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/2w

med s værende et heltal i området 0 < s < 2w

Page 21: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

21

p bits

Multiplikationsmetoden

• Den ønskede p længde hash værdi, findes i øverst betydende bit af r0• Metoden virker for alle gyldige A, men nogle værdier ser ud til at virke

bedre end andre, [Knuth] foreslår at• A ≈ (√5 - 1)/2 ≈ 0.6180339887….

S = A· 2w

r1 r0

X

h(k)

w bits

k

Page 22: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

22

Universel hashing

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

• Tilfældige hashfunktionersikrer at viikke enderi værste tilfælde

• Hashing kollision undåes ved chaining

U: Sæt af mulige keys

K: Sæt af anvendte nøgler

k1

k9

k4

k2 k3

k5

k6

k7k8

k1

k2

k3 /

k7

H: Sæt af mulige hash funktionerh1 h2

h3

h4

h5

h6

Page 23: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

23

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 Zp være sættet {0, 1, …., p - 1}• Lad Zp

* 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 ha,b, med a Zp og b Zp*

• ha,b(k) = ((ak+b) mod p) mod m• F.eks. med p = 17 og m =6, vil h3,4(8) = 5

• Familien af sådanne funktioner betegner vi• Hp,m = {ha,b : a Zp og b Zp

*} og kan vises at være universelle

Page 24: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

24

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

Page 25: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

25

Å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

John Schmidt

Lisa Schmidt

Sam Doe

0

1

872

873

998

999

John Schmidt +45 12 34 56 78

Lisa Schmidt +45 23 45 67 89

+45 34 56 78 90Sam Doe

Nøgle - værdi parIndeks

Sandra Doe Sandra Doe +45 33 44 55 66

- -

- -

Probing efter næste element

NøgleInput

Page 26: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

26

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

Page 27: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

27

Kvadratisk probing

• Kvadratisk probing baserer sig på en hash funktion af typen• h(k, i) = (h’(k) + c1i + c2i2) mod m

• Initierende hash værdi efterprøvet er således T[h’(k)] • og efterfølgende T[h’(k) + f(i, i2)]

• 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(k1,0) = h(k2, 0) => h(k1, 1) = h(k2, 1)

• lider den af Secundary Clustering der er som Primary Clustering blot tendensen er svagere

Page 28: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

28

Dobbelt hashing

• Dobbelt hashing har formen• h(k, i) = (h1(k) + ih2(k)) mod m

• Den initierende aflæste værdi findes i T[h1(k)] og efterfølgende værdier er offsettet med i· h2(k) mod m

• Dobbelt hashing er bedre end de andre metoder i den forstand at der dannes (m2) probe sekvenser og ikke (m) sekvenser som for den lineære/kvadratiske metode• Hvert hash par (h1(k), h2(k)) leder til en forskellig probe sekvens

Page 29: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

29

Eksempel med dobbelt hashing• h(k, i) = (h1(k) + i·h2(k)) mod 13

• h1(k) = k mod 13• h2(k) = k mod 11

• Først h(79, 0) = 1• Hvad med h(69, 0) = 4• Og med h(72, 0) = 7• Med h(50, 0) = 11• Nu bliver det tricky: h(98, 0) = 7

• Er optaget, så vi prøver h(98, 1) = 4• 98 mod 13 = 7, 98 mod 11 = 10, 17 mod 13 = 4

• (7+10) mod 13 = 4, nej dur ikke• (7+20) mod 13 = 1, nej dur ikke• (7+30) mod 13 = 11, nej dur ikke• (7+40) mod 13 = 8, ja der er plads

• Og h(14, 0) = 1• Hmm.. h(14, 1) = 5

0

1

2

3

4

5

6

7

8

9

10

11

12

79

69

72

98

14

50

Page 30: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

30

Et par tip til design af dobbelt hash funktioner

• Et godt valg af h2(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 = 2p og sikre h2(k) altid returnerer et ulige tal

• En anden måde at vælge sine dobbelt funktioner er• h1(k) = k mod m• h2(k) = 1 + (k mod m’)

• Her er m et primtal og m’ er et lidt mindre tal, f.eks. m’ = m - 1

Page 31: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

31

Dobbelt hashing kompleksitet

• Man kan vise at• vores forventet antal af forsøg ved et mislykket søgning givet ved:

• E[X] = 1/(1-)

• og at det forventede antal forsøg for en succesfuld søgning er• E[Y] = (1/)ln(1/(1-))

Page 32: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

32

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

Page 33: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

33

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

Page 34: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

34

Eksempel

Perfekt hashing til at gemme sættetK={10, 22, 37, 40, 52, 60, 70, 72, 75}

Ydre hash funktion har a = 3; b = 42; p = 101 og m = 9

/

//

/

/

1 0 0 10

9 10 18 / / / 60 72 / / 75 /

1 0 0 70

16 23 88 / / / / / / / 40 52 22

/ / / / 37 /

T0

1

2

3

4

5

6

7

8

m0

m2

m5

m7

a0

a2

a5

a7

b0

b2

b5

b7

s0

s2

s5

s7

Generel hash funktion ((ak + b) mod p) mod m

Page 35: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

35

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 = n2, 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• Hp,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• Hp,mj

• Med nj = mj = 1 har vi ikke brug for slot j, og vi kan derfor benytte a = b = 0

Page 36: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

36

Surprice …. Geohashing!

Page 37: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

37

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

Page 38: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

38

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ætat gøre

Page 39: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

39

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

Page 40: Mm8: Hash tables og Hashing - November 10, 2010kom.aau.dk/~rlo/lectures/algoAndArchI_2010/mm8_full.pdf · 2010-11-10 · • Svar: Ved hashing, men hvordan? • Ved registrering af

40

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