Theconceptandfunctionofthehashtable
Theelementsinthehashtablearedeterminedbythehashfunction.ThekeyKofthedataelementisusedasanindependentvariable,andthevaluecalculatedthroughacertainfunctionalrelationship(calledahashfunction)isthestorageaddressoftheelement.Itisexpressedas:
Addr=H(ключ)
Therefore,twomainproblemsneedtobesolvedbeforeestablishingahashtable:
⑴ConstructasuitableHashfunction
Стойността на равномерността H (ключ) е равномерно разпределена в хеш-таблицата;
Лесно за подобряване на скоростта на изчисляване на адреса
⑵Конфликт
Конфликт: В хеш-таблицата различни стойности на ключовесъответстват на едно и също място за съхранение. Това е ключовата дума K1≠K2, но H(K1)=H(K2). Единната хеш-функция може да намали конфликтите, но конфликтите не могат да бъдат избегнати.
Methodstoresolveconflicts:
⑴Метод на връзката (метод на ципа). Съхранявайте записите със същия адрес в линеен свързан списък. Например в останалия метод ключовата дума е (18,14,01,68,27,55,79), а делителят е 13. Адресът е (5,1,1,3,1,3,1), и хеш-таблицата е показана на фигурата.
⑵Отворен метод за адресиране. Ако h(k)е вече зает, търсете в съответствие със следната последователност: (h(k)+p⑴)%TSразмер,(h(k)+p⑵)%TSразмер,…,(h(k)+p(i))%TSразмер ,...
Сред тях h(k)е хеш-функцията, TSize е дължината на хеш-таблицата и p(i)е пробната функция. На базата на h(k)+p(i-1))%TSize, ако бъде открит конфликт, увеличениетоp(i)се използва за извършване на ново откриване, докато не възникне конфликт. Сред тях, в съответствие с различната сондафункцияp(i), адресирана към метода, се отваря методът (p(i)=i:1,2,3,...)и втори метод на сонда(p(i)=(-)1)^(i-1)*((i+1)/2)^2, тази последователност от откриване е :1,-1,4,-4,9…),произволен метод за откриване(p(i):произволноЧисло),метод на двойна хешфункция(двойна хешфункцияh(ключ),hp(ключ)Ако h(ключ)конфликт, тогава използвайтеhp(ключ),за да намеритехашаадреса.Последователността на сондата е: h(k),h(k)+hp(k),...,h(k)+i*hp(k)).
(3) Метод на адресиране на кофа. Кофа: Достатъчно място за съхранение. Адресация на кофа: Свържете кофа за всеки адрес в таблицата. Ако кофата е пълна, може да се използва отворено адресиране за справяне с нея. Например, вмъкнете A5, A2, A3, B5, A9, B2, B9, C2 и използвайте линейни проби за разрешаване. Както е показано
Как да конструирам хеш-таблица
Директно адресиране
Например: има демографска таблица от 1 до 100 години, където възрастта е ключовата дума, хеш-функцията приема ключовата дума.
Метод за числен анализ
Данните за рожден ден на някои ученици са както следва:
Година.Месец.Ден
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.
Средният метод на квадрат
Вземете няколко средни цифри след ключовите думи квадрат, който има адрес.
Метод на сгъване
Разделете ключовата дума на няколко части с едни и същи цифри (цифрата на последната част може да е различна) и след това вземете насложената сума от тези части (закръгляване) Тъй като има адрес, този метод се нарича сгъване.
Forexample:everyWestern-languagebookhasaninternationalstandardbooknumber,whichisa10-digitdecimalnumber.Ifyouwanttouseitasakeytoestablishahashtable,whenthetypeoflibrarybookisnotWhenitreaches10,000,thismethodcanbeusedtoconstructafour-digithashfunction.
Divideandleaveremaindermethod
Theremainderobtainedbydividingthekeywordbyanumberpnotgreaterthanthelengthmofthehashtableisthehashaddress.
H(ключ)=keyMODp(p<=m)
метод на произволно число
изберете произволна функция, вземете стойността на произволна функция на ключа. Има адрес, т.е.
H(ключ)=произволен(ключ),където произволна епроизволна функция. Този метод обикновено се използва, когато дължината на ключовата дума не е равна.
Ifthehashfunctionandconflicthandlingmethodareknown,thestepstobuildthehashtableareasfollows:
Стъпка 1. Извадете ключа на елемента с данни и изчислете в хеш-таблицата адреса на хранилището в D=H (ключ). Ако пространството за съхранение с адреса на хранилището не е заето, елементът с данни се съхранява; в противен случай възниква конфликт и се изпълнява стъпка 2.
Step2.Accordingtothestipulatedconflicthandlingmethod,calculatethestorageaddressunderthedataelementwhosekeyisthekey.Ifthestoragespaceofthestorageaddressisnotoccupied,saveit;otherwise,continuetoexecuteStep2untilastorageaddressthatisnotoccupiedbythestoragespaceisfound.
Конфликт
Няма значение колко добре е разработен дизайнът на функцията за хеширане, ще има конфликти, т.е. резултатите от това, че двете функции за обработка на ключови думи са картографирани в една и съща позиция. Следователно има някои методи, които могат да избегнат конфликти.
Zippermethod
Pulloutadynamiclinkedlistinsteadofastaticsequentialstoragestructure,whichcanavoidtheconflictofthehashfunction,butthedisadvantageisthatthedesignofthelinkedlististoocumbersome,whichincreasesthecomplexityofprogramming.Thismethodcancompletelyavoidtheconflictofthehashfunction.
Множествен хеш-метод
Проектирането на две или повече хеш-функции може да избегне конфликти, но все още има вероятност от конфликт. Колкото по-добре или повече е проектирана функцията, вероятността може да бъде намалена до минимум (освен ако характеристиката не е лоша, почти не е възможно да влезе в конфликт).
Метод на отворен адрес
Методът на отворен адрес има формула: Hi=(H(ключ)+di)MODmi=1,2,...,k(k<=m-1)
Сред тях грешната дължина на таблицата на хеш-таблицата е инкременталната последователност, когато възникне конфликт. Ако стойността на d може да бъде 1,2,3,...m-1, извикайте линейно откриване и след това хеширайте.
Ако вземете1, след всеки конфликт се преместете назад с1 позиция. Ако вземете1,-1,4,-4,9,-9,16,-16,...k*k,-k*k(k<=m/2)
Itiscalledtheseconddetectionandthenhashing.Ifthevalueofdimaybeapseudo-randomnumbersequence.Itiscalledpseudo-randomdetectionandthenhashing.
Метод за изграждане на домейн
Приемайки, че обхватът на стойността на функцията за хеширане е [0,m-1], задайте вектора HashTable[0..m-1]като основнатаблица и задайте вектор за пространство за съхранение над таблица[0..v]за съхраняване на конфликтни записи.