Хеш функция

Synonymhashvaluegenerallyreferstothehashfunction.

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]за съхраняване на конфликтни записи.

Related Articles
TOP