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 .