Dobbelt hashing

Når metoden med dobbelt spredningsværdi eller dobbelt hashing ( engelsk dobbelt hashing ) er en metode til at realisere en lukket hash-metode . I lukkede hash procedurer, gøres der forsøg på at rumme afhoppere i den hashtabel stedet for at lagre dem i cellen (fx som en liste). (Åbne hash-procedurer kan tildele poster to gange og kræver derfor ikke sondering.) OBS: Som det er i artiklen hash-tabel under "Varianter af hash-proceduren", anvendes udtrykkene "åben" eller "lukket hashing" på nøjagtig den modsatte måde.

For at gøre dette bruger dobbelt hashing en sonderingsfunktion, der inkluderer en sekundær hash-funktion, f.eks. B. , og som bruges, hvis indekset beregnet af den primære hash-funktion allerede er optaget.

Den komplette hash-funktion læser derefter :, hvor j er antallet af allerede "prøvede" indekser, dvs. Dette betyder, at j øges med 1, hver gang et indeks allerede bruges.

Sonderingsfunktionen formodes at danne en permutation af indekserne i hash-tabellen.

Sekvensen af ​​hash-funktioner, der nu er dannet ved hjælp af og ser sådan ud:

Omkostningerne ved denne metode er tæt på omkostningerne ved ideel hashing.

Hash-funktionernes uafhængighed

Dobbelt hashing bruger to uafhængige hash-funktioner og . Disse kaldes uafhængige, hvis sandsynligheden for en såkaldt dobbelt kollision, dvs. H. , er mindre end eller lig med og derfor minimal, hvor er arrayets størrelse.

Eksempler

Eksempel på funktioner

Matrixens størrelse: m

Indeks: {0; m-1}

Primær hashfunktion: ( metode til deling af resten )

Sekundær hash-funktion:

Forklarende funktion:

Fuld dobbelt hash-funktion:

Beregningseksempel

Matrixens størrelse: m = 7

Hash-funktioner
Undersøgende funktion

Hash-bord:

k 10 19. 31 22 14. 16
H 3 5 3 1 0 2
H ' 1 5 2 3 5 2

Arrayet fyldt ved hjælp af hash-tabel og probe-funktion:

0 1 2 3 4. plads 5 6.
31 22 16 10 - 19. 14.

Forklaring ved hjælp af eksemplet :

og genererer ikke en kollision og har derfor ikke brug for dobbelt hash-funktionen . Indekset for hash-funktionen kan aflæses her. skaber en kollision i arrayet på det punkt , hvorfor du nu bruger dobbelt hash-funktionen med :

Pointen skaber en kollision igen, hvorfor følgende nu kaldes:

Stillingen er ledig og modtager således indholdet .

Weblinks