Hash-toiminto

Synonymhashvaluegenerallyreferstothehashfunction.

Theconceptandfunctionofthehashtable

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

Addr=H(avain)

Therefore,twomainproblemsneedtobesolvedbeforeestablishingahashtable:

⑴Muuta sopiva hashfunktio

Tasaisuuden arvoH(avain)jaetaan tasaisesti tiivistetaulukossa;

Yksinkertainen parantaaosoitteenlaskennan nopeutta

⑵Ristiriita

Ristiriita:Hashtaulukossa eri avainarvot​vastaavat samaa tallennussijaintia.Toisin sanoenavainsanaK1≠K2,muttaH(K1)=H(K2).Yksimuotoinen funktio voivähentää ristiriitoja,muttaristiriitoja ei voida välttää.

Menetelmäkaupat ratkaisee ristiriidat:

⑴Linkitysmenetelmä(vetoketjumenetelmä).Tallenna tietueita, joissa on sama osoitteenosoite, lineaarisessa linkitetyssä luettelossa.Esimerkiksi muussa menetelmässäavainsana on(18,14,01,68,27,55,79),jajakaja13.Hashaddress on1,3,(5,1,1,1,3). jahashtaulukko on esitetty kuvassa.

⑵Avoinosoitemenetelmä.Jos h(k)on jo varattu,haeseuraavan järjestyksen mukaan:(h(k)+p⑴)%TSkoko,(h(k)+p⑵)%TSkoko,…,(h(k)+p(i))%TSize ,...

Niiden joukossa,h(k)onhashfunction,TSkoko onhashtaulukonpituus,jap(i)onilmaisintoiminto.H(k)+p(i-1))%TS-koon perusteella, jos ristiriita löytyy,lisäystäp(i)käytetäänjohteenpoistaavastaavastaavastaa. (p(i)=i:1,2,3,...)ja toinen koetinmenetelmä(p(i)=(-)1)^(i-1)*((i+1)/2)^2,havaitsemissekvenssi on :1,-1,4,-4,9…),satunnaistunnistusmenetelmä(p(i):satunnaisluku),kaksoishashfunktioh(avain),hp(avain)Josh(avain)ristiriidat,etsintänäp(avain)hashaddress.Tunnusjärjestys: h(k),h(k)+hp(k),...,h(k)+i*hp(k)).

(3)Kämpäriosoitemenetelmä.Säilö:riittävästi tallennustilaa.Sähön osoitus:Liitä ämpäri jokaiseen taulukon osoitteeseen.Jos ämpäri on täynnä, sen käsittelemiseen voidaan käyttää avointa osoitetta.Esimerkiksi,lisääA5,A2,A3,A3,Bliceest.n.

Miten rakentaahashtable

Suoraosoite

Esimerkki:Välillä on väestötietotaulukko 1-100 vuotta vanha, missä ikä onavainsana, hash-toiminto vie itse avainsanan.

Numeerinen analyysimenetelmä

Joidenkin opiskelijoiden syntymäpäivätiedot ovat seuraavat:

Vuosi.Kuukausi.Päivä

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.

Keskimmäinen neliömenetelmä

Otakeskimmällemuutama numeroavainsanojen ruudun jälkeen.

Taittomenetelmä

Jaaavainsana useisiin osiin, joissa on samat numerot (viimeisen osan numero voi olla erilainen), ja ota sitten osien päällekkäinen summa(pyöristys)Asahashaddress,tätä menetelmää kutsutaan taittoksi.

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

Divideandleaveremaindermethod

Theremainderobtainedbydividingthekeywordbyanumberpnotgreaterthanthelengthmofthehashtableisthehashaddress.

H(avain)=avainMODp(p<=m)

satunnaislukumenetelmä

valitse satunnainen funktio, ota satunnaisfunktion arvo avaimella on varjossa, eli

H(avain)=satunnainen(avain),jossasatunnainentoiminto.Tätä menetelmää käytetään yleensä, kun avainsanan pituus on yhtä suuri.

Ifthehashfunctionandconflicthandlingmethodareknown,thestepstobuildthehashtableareasfollows:

Vaihe 1.Ota poistietoelementin avain ja laske se hash-taulukossaTallennusosoite:D=H(avain). Jostallennustilaa, jossa ontallennusosoiteEi ole varattu, tietoelementti tallennetaan; muuten tapahtuu ristiriita ja Vaihe2suoritetaan.

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

Ristiriita

Riippumatta siitä, kuinka tiivistefunktion suunnittelua kehitetään, syntyy ristiriitoja, eli tuloksena on, että kaksi avainsanankäsittelytoimintoa liitetään samaan kohtaan. Siksi on olemassa jokinMenetelmä, joka voi välttää ristiriitoja.

Zippermethod

Pulloutadynamiclinkedlistinsteadofastaticsequentialstoragestructure,whichcanavoidtheconflictofthehashfunction,butthedisadvantageisthatthedesignofthelinkedlististoocumbersome,whichincreasesthecomplexityofprogramming.Thismethodcancompletelyavoidtheconflictofthehashfunction.

Moni-hash-menetelmä

Kahden lisähajautustoiminnon suunnittelu voi välttää ristiriidat, mutta ristiriitojen mahdollisuus on edelleen olemassa. Mitä paremmin tai enemmän toimintoa on suunniteltu, sen todennäköisyys voidaan pienentää Minimoi (ellei ominaisuus ole liian huono, lähes mahdotonta).

Avoinosoitemenetelmä

Openaddress-menetelmän kaava:Hi=(H(avain)+di)MODmi=1,2,...,k(k<=m-1)

Niiden joukossa,sumutustaulukonpituushashtable.dionlisäjakso,kunkonfliktitapahtuu.Josarvodiehkä1,2,3,...m-1,puhelulinjantunnistusja sittenhash.

Jos ottaa1,niinristiriidan jälkeen,siirry taaksepäin1sijaintia.Jos ottaa1,-1,4,-4,9,-9,16,-16,...k*k,-k*k(k<=m/2)

Itiscalledtheseconddetectionandthenhashing.Ifthevalueofdimaybeapseudo-randomnumbersequence.Itiscalledpseudo-randomdetectionandthenhashing.

Verkkotunnuksen rakennusmenetelmä

Jos oletetaan, ettähash-funktion arvoalue on[0,m-1], aseta vectorHashTable[0..m-1]perustaulukoksi ja asetapastoragespacevectorOverTable[0..v] tallentaakseen ristiriitaisia ​​tietueita.

Related Articles
TOP