Newest Viewed Downloaded

Algoritmer og Datastrukturer 1 Hashing [CLRS, kapitel 11.1-11.4]Gerth Stølting Brodal Aarhus Universitet

Algoritmer og Datastrukturer 1 Hashing [CLRS, kapitel 11.1-11.4]

Gerth Stølting Brodal Aarhus Universitet

Ordbogen.com hash (Engelsk-Dansk) 1. (sb) (ret med kød og kartofler) biksemad (fx a meat and potato hash); (fig.) kludder; noget værre rod;  ¤ make a ~ of forkludre; udføre på en elendig (el. kikset) måde; settle somebody’s ~ ordne nogen; få nogen ned med nakken; 2. (sb) (narko) hash (fx smoke hash); 3. (vb) hakke; skære i stykker; (fig.) forkludre; slippe (rigtigt) dårligt fra;  ¤ ~ over diskutere; drøfte (fx we can hash it over later); ~ up forkludre; slippe dårligt fra. Før vi starter – lad os lige slå fast hvad ordet ”hash” betyder

Abstrakt Datastruktur: Ordbog

Delete(S,x) Insert(S,x) Search(S,x) Kan vi udnytte at x for alle praktiske formål er en sekvens af bits? JA !

Alle nøgler er tal...

”Sko” = 01010011.01101011.011011112 = 546699110 I det følgende antages at alle er nøgler er tal – det er dog ingen begrænsning da alle strenge, bitvectorer etc kan opfattes som et tal.

Direkte Adressering : Nøgler {0,1,2,...,m-1}

+ Godt ved små nøgle universer + Selv kan generere nøglerne som 1,2,3,... – Stort plads overforbrug når kun få nøgler brugt

Hash Funktion

+ Nemt at jævne nøglerne jævnt ud – Flere nøgler kan hashes til samme værdi – Næsten ens nøgler kan være vilkårligt spredt 5 25964 5 24123 6 12002 1 12001 0 3409 2 1231 6 746 5 519 4 257 0 7 h(x) x h(x)=5·x mod 7 Nøgler U Hash funktion h : U → {0,1,...,m-1} (m<<|U| og m|U| mulige valg af h) h vælges så den er nem at beregne uden at skulle gemme en tabel over alle funktionsværdier Spørgsmål: Hvor mange funktioner kan beskrives 6 bogstaver? (Den valgte hash funktion er valgt bevidst til at være kort at beskrive – dem er der ikke mange af - men vi forsøger alligevel at finde en funktion der ”spreder godt”)

Hash Tabel : Kollisionslister

5 25964 5 24123 6 12002 1 12001 0 3409 2 1231 6 746 5 519 4 257 0 7 h(x) x h(x)=5·x mod 7 Gem mængde af nøgler K Vælg tilfældig hash funktion h : U → {0,1,...,m-1} Gem nøglerne i tabel efter hash værdi Kollisionslister til nøgler med sammehash værdi

Hash Tabel : Kollisionslister

Vælg en uniform tilfældig hash funktion: Forventet antal nøgler i en indgang i tabellen |K|/m Insert, Delete, Search forventet tid O(|K|/m), dvs. tid O(1) hvis m=Ω(|K|) m

Hvad er en god Hash Funktion?

– For enhver funktion findes en dårlig mængde nøgler der hasher til samme værdi + For enhver mængde nøgler findes en god hash funktion der jævner godt ud (om den kan beskrives kompakt er et andet spørgsmål) Mål Find en lille mængde af hash funktioner hvor en tilfældig funktion virker rimmelig godt på en given mængde

Hash Funktioner : Eksempler

h(x) = x mod m (typisk m et primtal) m=28-1 ignorerer alle ombytninger af tegn: h(”c3c2c1”) = h(”c1c3c2”) h(x) =└s·x/2w-k┘mod 2k (x = w-bit, h(x)=k-bit) h(0101000010101010) = 01000 0101000010101010 · 1001111000110111 = 00110001110110100100000010000110 m=28 ignorerer alt på nær de 8 sidste bit: h(...x3x2x110101111)=h(...y3y2y110101111) Fornuftig valg af m er et primtal forskelligt fra 2p-1, helst langt fra en 2er potens. Knuth foreslår at bruge s=2^w*(sqrt(5)-1)/2 Ingen af eksemplerne giver nogen guarantier.

Universelle Hash Funktioner

Find primtal p ≥ |U|. Definer p·(p-1) hash funktioner ha,b, hvor 1≤a

Hash Tabel : Universel Hashing

Delete(S,x) Insert(S,x) Search(S,x) O(1) forventet

Hashing af tal med mange bits...

ha(x) = xs/w-1·as/w-1+xs/w-2·as/w-2+···+x1·a1+x0 mod p (a·b) mod p=((a mod p)·b) mod p (a+b) mod p=((a mod p)+b) mod p x = (bs-1bs-2...b2b1b0)2 = xs/w-1·2w(s/w-1) + xs/w-2·2w(s/w-2) + ··· + x1·2w + x0 ys/w-1 := xs/w-1 mod p yi := (yi+1·a+xi) mod p (for i = s/w-2...0) ha(x) = y0 Hash funktionen er taget fra CLRS, Exercise 11.3-6. p et primtal>2^w.

Åben Adressering

Bruger kun et array

Åben Adressering : Analyse Uniform hashing h(k,1), h(k,2), h(k,3),... er en uniform tilfældig rækkefølge (urealistisk) Sætning Ved uniform hashing er det forvente antal lookups 1/(1-α) hvor α=|K|/m er belastningsfaktoren

Liniær Probing

6 20 4 19 7 12 5 11 1 9 12 6 10 5 6 3 4 2 h(x) x h’(x)=2·x mod 17 Eksempel : Indsæt 9, 3, 20, 6, 12, 2, 19, 11, 5 Indsæt x på første ledige plads h(k,i) = h’(x)+i mod m for i = 0,1,2... Deletions – er en opgave i CLRS

Kvadratisk Probing

Indsæt x på første ledige plads h(k,i) = h’(x)+c1·i+c2·i2 mod m for i = 0,1,2, ... hvor c1 og c2≠0 er konstanter Dobbelt Hashing Indsæt x på første ledige plads h(k,i) = h1(x)+i·h2(x) mod m for i = 0,1,2, ... hvor h1 og h2 er hash funktioner h’(x) h1(x) c1=0 c2=1 h2(x)=3 Dobbelt hashing bedre til at fordele jævnt ud end liniær og kvadratisk probing da den bruger flere probe sekvenser end linieær og kvadratisk probing der hver kun bruger 1 probe sekvens Kapitel 11.4 giver også en analyse af uniform hashing hvor hver probe sekvens er en tilfældig permutation (urealistisk) – og viser så en forventet søgetid på 1/(1- |K|/m)

Eksperimentel Sammenligning

wikipedia.org Table med 1000 indgange

Hashing

Valg af hash funktion Prøv sig frem... Universelle hash funktioner Hash tabeller Kollisionslister (kædede lister) Åben adressering Liniær probing Kvadratisk probing Dobbelt hashing

Showing 1 - 19 of 19 items Details

Name: 
hashing
Author: 
N/A
Company: 
N/A
Description: 
Algoritmer og Datastrukturer 1 Hashing [CLRS, kapitel 11.1-11.4]Gerth Stølting Brodal Aarhus Universitet
Tags: 
hash | nøgler | funktion | hashing | tilfældig | funktioner | tabel | kan
Created: 
2/25/2008 11:32:52 AM
Slides: 
19
Views: 
15
Downloads: 
4
Rating: 
0


> Comment



Share this presentation
|

Comments

Share this presentation:

|
Sitemap