Хеш таблица в C++

Hes Tablica V C



Хеш-таблицата също е известна с думата „Hasp карта“ в програмирането. В езика за програмиране C++ хеш-таблиците по своята същност са структура от данни, която се използва най-вече за съхраняване на ключовете на масива и техните стойности по двойки. Трябва да се използва хеш алгоритъм за изчисляване на индекса в масив от слотове, където се съхраняват стойностите, и всеки ключ трябва да бъде различен. Разчита се на хеш-таблица за добавяне, премахване и извличане на елементи въз основа на техните отделни стойности. В тази статия ще разберем концепцията за хеш таблицата с помощта на подходящи примери.

Хеш функция

В този раздел ще обсъдим хеш функцията, която помага да се изпълни хеш кодът на свързания ключ на елемента с данни в структурата на данните, както е споменато по-долу:

Int hashItem ( вътр ключ )
{
връщане ключ % размер на масата ;
}

Процесът на изпълнение на индекса на масив се нарича хеширане. Понякога се изпълнява един и същи тип код, за да се генерира същия индекс, като се използват едни и същи ключове, наречени сблъсъци, които се обработват чрез различни вериги (създаване на свързан списък) и внедряване на отворени стратегии за адресиране.







Работа с хеш таблица в C++

Указателите към реалните стойности се съхраняват в хеш-таблицата. Той използва ключ за търсене на индекса на масив, в който стойностите срещу ключовете трябва да бъдат съхранени на желаното място в масив. Взехме хеш таблицата с размер 10, както е споменато по-долу:



0 1 2 3 4 5 6 7 8 9

Нека да вземем на случаен принцип всякакви данни срещу различни ключове и да съхраним тези ключове в хеш таблица, като просто изчислим индекса. И така, данните се съхраняват спрямо ключовете в изчисления индекс с помощта на хеш функция. Да предположим, че вземем данни = {14,25,42,55,63,84} и ключове = [ 15,9,5,25,66,75 ].



Изчислете индекса на тези данни с помощта на хеш функцията. Стойността на индекса е посочена в следното:





Ключ петнадесет 9 29 43 66 71
Изчислете индекса 15%10 = 5 9%10=0 29%10=9 43%10=3 66%10=6 71%10=1
Данни 14 25 42 55 63 84

След като създадете индекса на масив, поставете данните срещу ключа върху точния индекс на даден масив, както е описано по-горе.

25 84 55 14 63 42
0 1 2 3 4 5 6 7 8 9

След това можем да видим, че възниква сблъсък, ако два или повече ключа имат един и същ хеш код, което води до същия индекс на елементите в масива. Имаме едно решение за избягване на шансовете за сблъсък: избор на добър хеш метод и прилагане на точните стратегии.



Сега нека обсъдим различните техники за внедряване с помощта на подходящи примери.

Пример: Добавете данни в хеш-таблица с помощта на отворена хешираща техника

В този пример използваме техника за внедряване като Open Hashing, за да избегнем сблъсък в хеш-таблицата. При отворено хеширане или верижно свързване създаваме свързан списък, за да веригираме стойностите на хеш-таблицата. Кодовият фрагмент на този пример е приложен в следното, което описва отворената хешираща техника:

#include
#include <списък>
клас Хеш-таблица {
частен :
статичен конст вътр tableSize = 10 ;
std :: списък < вътр > tableHas [ tableSize ] ;
вътр hashFunc ( вътр ключ ) {
връщане ключ % tableSize ;
}
публичен :
невалиден вмъкнете ( вътр ключ ) {
вътр индекс = hashFunc ( ключ ) ;
tableHas [ индекс ] . избутвам ( ключ ) ;
}
невалиден viewTable ( ) {
за ( вътр аз = 0 ; аз < tableSize ; ++ аз ) {
std :: cout << '[' << аз << ']' ;
за ( Автоматичен то = tableHas [ аз ] . започвам ( ) ; то ! = tableHas [ аз ] . край ( ) ; ++ то ) {
std :: cout << ' -> ' << * то ;
}
std :: cout << std :: endl ;
}
}
} ;
вътр основен ( ) {
HashTable hasTable ;
hasTable. вмъкнете ( петнадесет ) ;
hasTable. вмъкнете ( 33 ) ;
hasTable. вмъкнете ( 23 ) ;
hasTable. вмъкнете ( 65 ) ;
hasTable. вмъкнете ( 3 ) ;
hasTable. viewTable ( ) ;
връщане 0 ;
}

Това е много интересен пример: създаваме свързан списък и вмъкваме данните в хеш-таблицата. Първо, ние дефинираме библиотеките в началото на програмата. The < списък > библиотека се използва за внедряване на свързан списък. След това изграждаме клас с име „HashTable“ и създаваме атрибутите на класа, които са частни като размер на таблица и масив от таблици, използвайки ключовата дума „private:“. Не забравяйте, че частните атрибути не могат да се използват извън класа. Тук приемаме размера на таблицата като „10“. Инициализираме хеш метода с помощта на това и изчисляваме индекса на хеш таблицата. В хеш функцията предаваме ключа и размера на хеш таблицата.

Създаваме няколко необходими функции и ги правим публични в класа. Не забравяйте, че публичните функции могат да се използват извън класа навсякъде. Използваме ключовата дума „public:“, за да стартираме публичната част на класа . Тъй като искаме да добавим нови елементи към хеш-таблицата, създаваме функция с име „InsertHash“ с ключ като аргумент на функцията. Във функцията „вмъкване“ инициализираме индексната променлива. Предаваме хеш функцията на индексната променлива. След това прехвърлете индексната променлива към свързания списък tableHas[], като използвате метода „push“, за да вмъкнете елемент в таблицата.

След това изграждаме функция „viewHashTab“, за да покажем хеш-таблицата, за да видим нововмъкнатите данни. В тази функция вземаме цикъл „for“, който търси стойностите до края на хеш-таблицата. Уверете се, че стойностите се съхраняват при същия индекс, който е разработен с помощта на хеш функция. В цикъла предаваме стойностите на съответния им индекс и завършваме класа тук. Във функцията „main“ вземаме обекта от клас с име „hasTable“. С помощта на този клас обект можем да получим достъп до метода на вмъкване, като подадем ключа в метода. Ключът, който предадохме във функцията „main“, се изчислява във функцията „insert“, която връща позицията на индекса в хеш-таблицата. Показахме хеш-таблицата, като извикахме функцията „view“ с помощта на обект „Class“.

Резултатът от този код е приложен в следното:

Както виждаме, хеш-таблицата е създадена успешно с помощта на свързания списък в C++. Отвореното верижно свързване се използва, за да се избегне сблъсък на един и същи индекс.

Заключение

В крайна сметка заключихме, че хеш-таблицата е най-новата техника за съхраняване и получаване на ключовете с двойки стойности, за да се справят ефективно с огромни количества данни. Шансовете за сблъсък са много високи в хеш-таблицата, унищожавайки данните и тяхното съхранение. Можем да преодолеем този сблъсък, като използваме различни техники за управление на хеш таблицата. Чрез разработването на хеш-таблицата в C++, разработчиците могат да увеличат производителността, като използват най-подходящата техника за съхраняване на данните в хеш-таблицата. Надяваме се, че тази статия е полезна за вашето разбиране на хеш-таблицата.