Dubbel hasning
När metoden med dubbel spridningsvärde eller dubbel hashing ( engelsk dubbel hashing ) är en metod för att förverkliga en sluten hashmetod . I slutna förfaranden hash, görs försök att rymma avhoppare i den hashtabellen stället för att lagra dem i cellen (t ex som en lista). (Öppna hashprocedurer kan tilldela poster två gånger och kräver därför ingen sondering.) Observera: Som det är i artikelns hashtabell under "Varianter av haschproceduren" används termerna "öppen" eller "sluten hashing" i exakt tvärtom.
För att göra detta använder dubbel hashing en sonderingsfunktion som inkluderar en sekundär hash-funktion, t.ex. B. , och som används om indexet som beräknats av den primära hashfunktionen redan är upptagen.
Full hash-funktionen läser sedan :, där j är antalet redan "försökta" index, dvs. Detta innebär att j ökas med 1 varje gång ett index redan används.
Sondfunktionen är tänkt att bilda en permutation av indexen för hashtabellen.
Sekvensen av hashfunktioner som nu bildas med och ser ut så här:
Kostnaden för denna metod ligger nära kostnaden för idealisk hasning.
Hashfunktionernas oberoende
Dubbel hashing använder två oberoende hashfunktioner och . Dessa kallas oberoende om sannolikheten för en så kallad dubbelkollision, dvs. H. , är mindre än eller lika med och därför minimal, var är arrayens storlek.
Exempel
Exempel på funktioner
Matrisens storlek: m
Index: {0; m-1}
Primär hashfunktion: ( metod för återstoden av divisionen )
Sekundär hashfunktion:
Utforskande funktion:
Full dubbel hash-funktion:
Beräkningsexempel
Matrisstorlek: m = 7
- Hash-funktioner
- Utforskande funktion
Hash-bord:
| k | 10 | 19: e | 31 | 22: a | 14: e | 16 |
|---|---|---|---|---|---|---|
| H | 3 | 5 | 3 | 1 | 0 | 2 |
| H ' | 1 | 5 | 2 | 3 | 5 | 2 |
Matrisen fylld med hjälp av hash-tabell och sondfunktion:
| 0 | 1 | 2 | 3 | 4: e | 5 | 6: e |
|---|---|---|---|---|---|---|
| 31 | 22: a | 16 | 10 | - | 19: e | 14: e |
Förklaring med exemplet :
och generera inte en kollision och behöver därför inte den dubbla hashfunktionen . Indexet för hashfunktionen kan avläsas här. skapar en kollision i matrisen vid punkten , varför du nu använder den dubbla hashfunktionen med :
Poängen skapar en kollision igen, varför följande nu kallas:
Anställningen är ledig och får därmed innehållet .