Hashovací funkce

Synonymhashvaluegenerallyreferstothehashfunction.

Theconceptandfunctionofthehashtable

Theelementsinthehashtablearedeterminedbythehashfunction.ThekeyKofthedataelementisusedasanindependentvariable,andthevaluecalculatedthroughacertainfunctionalrelationship(calledahashfunction)isthestorageaddressoftheelement.Itisexpressedas:

Addr=H(klíč)

Therefore,twomainproblemsneedtobesolvedbeforeestablishingahashtable:

⑴ConstructasuitableHashfunction

Hodnota stejnoměrnostiH(klíč) je rovnoměrně rozdělena v hašovací tabulce;

Jednoduché pro zvýšení rychlosti výpočtu adresy

⑵Konflikt

Konflikt:V hašovací tabulce různé hodnoty klíčů​​odpovídají stejnému umístění úložiště.To znamená, že klíčové slovo K1≠K2,aleH(K1)=H(K2).Jednotná hašovací funkce může omezit konflikty,ale konfliktům se nelze vyhnout.

Konflikty v obchodě s metodami:

⑴Metoda odkazu (metoda zipu).Uložte záznamy se stejnou adresou hashadu do lineárního propojeného seznamu.Například ve zbývající metodě je klíčové slovo (18,14,01,68,27,55,79) a dělení 13.Hodnota je (5,1,3,1,3), a tabulka hash je zobrazena na obrázku.

⑵Otevřete metodu adresování.Pokudh(k)je již obsazeno, vyhledejte podle následující sekvence:(h(k)+p⑴)%TSvelikost,(h(k)+p⑵)%TSvelikost,…,(h(k)+p(i))%TSvelikost ,...

Mezi nimi je h(k)hashfunkce,TSizejedélkahašovacítabulkyap(i)jefunkce sondy.Na základěh(k)+p(i-1))%TSvelikost, je-li nalezen konflikt, se přírůstekp(i)bepoužije k provedení nové detekcep(i)přizpůsobeníprovedeníp(i)přizpůsobeníprovedeníp(i)přizpůsobeníprovedeníp(i)přizpůsobeníprovedeníp (p(i)=i:1,2,3,...)adruhá metoda sondy(p(i)=(-)1)^(i-1)*((i+1)/2)^2, sekvence detekce je :1,-1,4,-4,9…),metoda náhodné detekce(p(i):náhodnéČíslo),metoda dvojité hašovací funkce (dvojitá hašovací funkceh(klíč),hp(klíč)Ifh(klíč)konflikty,pak pomocí hp(klíč)nalezneadresuhashad.Sekvence je: h(k),h(k)+hp(k),...,h(k)+i*hp(k)).

(3)Metoda adresování kbelíku.Kbelík:Velký dostatek úložného prostoru.Adresování kbelíku:Přiřaďte kbelík ke každé adrese v tabulce.Pokud je kbelík plný,může se s ním vypořádat otevřenáadresa.Například vložteA5,A2,A3,B5,A9,Cřešte a použijte řádek.B2.

Howtoconstructahashtable

Přímé adresování

Příklad:Existuje demografická tabulka od 1 do 100 let, kde je klíčové slovo, hašovací funkce přebírá samotné klíčové slovo.

Metoda numerické analýzy

Údaje o narozeninách některých studentů jsou následující:

Rok.Měsíc.Den

75.10.03

75.11.23

76.03.02

76.07.12

75.04.21

76.02.15

...

Afteranalysis,thefirstplace,thesecondplace,andthethirdplacearelikelytoberepeated.Takingthesethreeplaceswillincreasethechanceofconflict,sotrynottotakethefirstthreeplaces.,Thelastthreearebetter.

Metoda čtverce uprostřed

Za klíčovým slovem čtverec s adresou vezměte několik prostředních číslic.

Metoda skládání

Rozdělte klíčové slovo na několik částí se stejnými číslicemi (číslice poslední části se může lišit) a poté vezměte vložený součet těchto částí (zaokrouhlení) jako adresu, tento způsob se nazývá skládání.

Forexample:everyWestern-languagebookhasaninternationalstandardbooknumber,whichisa10-digitdecimalnumber.Ifyouwanttouseitasakeytoestablishahashtable,whenthetypeoflibrarybookisnotWhenitreaches10,000,thismethodcanbeusedtoconstructafour-digithashfunction.

Divideandleaveremaindermethod

Theremainderobtainedbydividingthekeywordbyanumberpnotgreaterthanthelengthmofthehashtableisthehashaddress.

H(klíč)=klíčMODp(p<=m)

metoda náhodných čísel

zvolte náhodnou funkci, vezměte hodnotu náhodné funkce klíčeIsitshahaddress, tzn.

H(klíč)=náhodný(klíč),kdenáhodnájenáhodnáfunkce.Tato metoda se obvykle používá, když není délka klíčového slova stejná.

Ifthehashfunctionandconflicthandlingmethodareknown,thestepstobuildthehashtableareasfollows:

Krok 1. Vyjměte klíč datového prvku a vypočítejte jej v hashovací tabulceAdresa úložiště vD=H(klíč).Pokud není úložný prostor s adresou úložiště obsazen, datový prvek se uloží; jinak dojde ke konfliktu a bude proveden Krok2.

Step2.Accordingtothestipulatedconflicthandlingmethod,calculatethestorageaddressunderthedataelementwhosekeyisthekey.Ifthestoragespaceofthestorageaddressisnotoccupied,saveit;otherwise,continuetoexecuteStep2untilastorageaddressthatisnotoccupiedbythestoragespaceisfound.

Konflikt

Bez ohledu na to, jak je návrh hashovací funkce propracovaný, dojde ke konfliktům, to znamená, že výsledky dvou funkcí zpracování klíčových slov jsou namapovány na stejné pozici. Existuje proto několik metod, jak se vyhnout konfliktům.

Zippermethod

Pulloutadynamiclinkedlistinsteadofastaticsequentialstoragestructure,whichcanavoidtheconflictofthehashfunction,butthedisadvantageisthatthedesignofthelinkedlististoocumbersome,whichincreasesthecomplexityofprogramming.Thismethodcancompletelyavoidtheconflictofthehashfunction.

Multi-hashmetoda

Návrh dvou nebo více hašovacích funkcí se může vyhnout konfliktům, ale stále existuje možnost konfliktu. Čím lépe nebo více funkcí je navrženo, pravděpodobnost lze snížit Minimalizovat (pokud není charakteristika špatná, je téměř nemožné konfliktu).

Metoda otevřené adresy

Metoda otevřené adresy má vzorec:Hi=(H(klíč)+di)MODmi=1,2,...,k(k<=m-1)

Mezi nimi chybná délka tabulky hašovací tabulky.je přírůstková posloupnost, když dojde ke konfliktu.Pokud je hodnotadimožná1,2,3,...m-1, vyvolejte detekci a poté hash.

Pokud jde o 1, pak po každém konfliktu, posuňte se zpět o 1 pozici. Pokud jdete o 1,-1,4,-4,9,-9,16,-16,...k*k,-k*k(k<=m/2)

Itiscalledtheseconddetectionandthenhashing.Ifthevalueofdimaybeapseudo-randomnumbersequence.Itiscalledpseudo-randomdetectionandthenhashing.

Metoda vytváření domény

Za předpokladu, že rozsah hodnot hašovací funkce je [0,m-1], nastavte vektorovouHashTable[0..m-1]jako základní tabulku a nastavte vektor úložného prostoruOverTable[0..v]pro uložení konfliktních záznamů.

Související články
HORNÍ