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 avainarvotvastaavat 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.