Kaj je Hashtable?

V računalništvu je hashtable podatkovna struktura za shranjevanje podatkov, ki je sestavljena iz seznama vrednosti, imenovanih ključi, ki se seznanijo z ustreznim seznamom vrednosti, imenovanim matrika. Ime podjetja se lahko na primer poveže z njegovim naslovom. Običajno ima vsaka vrednost v matriki številko položaja, ki se imenuje hash. Funkcija zgoščevanja je na splošno niz navodil ali algoritem, ki preslika vsako vrednost ključa v zgoščeno vrednost – na primer poveže ime podjetja z naslovom, njegovo telefonsko številko in poslovno kategorijo. Namen hash funkcije je dodeliti vsakemu ključu edinstveno ustrezno vrednost v matriki; to se običajno imenuje zgoščevanje. Hash funkcije morajo biti pravilno oblikovane, da zgoščevalna tabela deluje pravilno.

Učinkovitost zgoščevalne tabele na nizu podatkov je odvisna od učinkovitosti njene hash funkcije. Dobra hash funkcija običajno zagotavlja enotno iskanje ključev in enakomerno porazdelitev preslikav v ustreznem nizu. Do zgoščenega trka pride, ko sta dva ključa dodeljena enaki ustrezni vrednosti. Ko pride do zgoščenega trka, se zgoščena funkcija običajno znova izvede, dokler ni najdena edinstvena ustrezna vrednost; to običajno povzroči daljše čase zgoščevanja. Čeprav je število ključev v razpršilni tabeli običajno fiksno, včasih lahko pride do podvojenih ključev. Kljub temu ima dobro zasnovana hashtabela učinkovite zgoščevalne funkcije, ki preslikajo vsak ključ v edinstveno ustrezno vrednost v matriki.

Včasih lahko neučinkovite zgoščevalne funkcije v zgoščevalni tabeli povzročijo tudi gručo preslikav. Če zgoščena funkcija ustvari gručo preslikav za obstoječe ključe, lahko to poveča čas, potreben za iskanje ustreznih vrednosti. To lahko upočasni zgoščevanje za prihodnje ključe, saj večina zgoščenih funkcij na splošno išče naslednjo razpoložljivo pozicijo v matriki. Če je bila velika skupina vrednosti že dodeljena, bi običajno trajalo veliko dlje, da bi iskali nedodeljeno vrednost za nov ključ.

Faktor obremenitve je še en koncept, povezan z učinkovitostjo hash funkcije; faktor obremenitve je količina že obstoječih zgoščenih točk glede na celotno velikost ustrezne matrike v razpršilni tabeli. Običajno se določi tako, da se število že dodeljenih ključev deli z velikostjo ustrezne matrike. Ko se faktor obremenitve poveča, bo dobra hash funkcija običajno še vedno vzdrževala stalno število trkov in grozdov do določene točke. Pogosto se ta prag lahko uporabi za določitev, kako učinkovita je zgoščena funkcija z danim številom ključev in kdaj bo morda potrebna nova zgoščena funkcija.

Številni raziskovalci na področju računalništva so si prizadevali ustvariti popolno hash funkcijo – takšno, ki ne povzroča trkov ali grozdov zaradi vse večjega faktorja obremenitve. V teoriji je ključ do izdelave popolne hash table izdelati popolno hash funkcijo. Na splošno raziskovalci verjamejo, da mora imeti popolna zgoščena funkcija konstantno zmogljivost – število trkov in grozdov – z naraščajočim faktorjem obremenitve. V najslabšem primeru bi popolna zgoščena funkcija še vedno omogočala stalno zgoščevanje, ne da bi dosegli prag.