Kas yra Hashtable?

Kompiuterių moksle maišos lentelė yra duomenų struktūra, skirta duomenims saugoti, kurią sudaro reikšmių sąrašas, vadinamas raktais, kurie susiejami su atitinkamu reikšmių sąrašu, vadinamu masyvu. Pavyzdžiui, įmonės pavadinimas gali būti susietas su adresu. Paprastai kiekviena masyvo reikšmė turi pozicijos numerį, vadinamą maiša. Maišos funkcija paprastai yra instrukcijų rinkinys arba algoritmas, susiejantis kiekvieną rakto reikšmę su maiša – pavyzdžiui, susiejantis įmonės pavadinimą su adresu, telefono numeriu ir verslo kategorija. Maišos funkcijos tikslas – priskirti kiekvieną raktą unikaliai atitinkamai masyvo reikšmei; tai paprastai vadinama maiša. Maišos funkcijos turi būti tinkamai suformatuotos, kad maišos lentelė tinkamai veiktų.

Maišos lentelės našumas duomenų rinkinyje priklauso nuo jos maišos funkcijos efektyvumo. Gera maišos funkcija paprastai užtikrina vienodą raktų paiešką ir tolygų atvaizdų pasiskirstymą atitinkamame masyve. Maišos susidūrimas įvyksta, kai du raktai priskiriami tai pačiai atitinkamai vertei. Kai įvyksta maišos susidūrimas, maišos funkcija paprastai vykdoma dar kartą, kol randama unikali atitinkama reikšmė; dėl to dažniausiai pailgėja maišos laikas. Nors raktų skaičius maišos lentelėje paprastai yra fiksuotas, kartais gali būti pasikartojančių raktų. Nepaisant to, gerai suprojektuota maišos lentelė turi veiksmingas maišos funkcijas, kurios kiekvieną raktą susieja su unikalia atitinkama masyvo verte.

Kartais neveiksmingos maišos funkcijos maišos lentelėje taip pat gali sudaryti atvaizdų grupę. Jei maišos funkcija sukuria esamų raktų atvaizdų grupę, gali pailgėti laikas, kurio reikia atitinkamoms reikšmėms ieškoti. Tai gali sulėtinti būsimų raktų maišą, nes dauguma maišos funkcijų paprastai ieško kitos galimos pozicijos masyve. Jei jau priskirta didelė reikšmių grupė, naujo rakto nepriskirtos vertės paieška paprastai užtruks daug ilgiau.

Apkrovos koeficientas yra kita sąvoka, susijusi su maišos funkcijos efektyvumu; apkrovos koeficientas yra jau esamų maišų skaičius, palyginti su bendru atitinkamo masyvo dydžiu maišos lentelėje. Paprastai jis apibrėžiamas jau priskirtų raktų skaičių padalijus iš atitinkamo masyvo dydžio. Didėjant apkrovos koeficientui, gera maišos funkcija paprastai išlaiko pastovų susidūrimų ir grupių skaičių iki tam tikro taško. Dažnai šis slenkstis gali būti naudojamas norint nustatyti maišos funkcijos veiksmingumą naudojant tam tikrą raktų skaičių ir kada gali prireikti naujos maišos funkcijos.

Daugelis kompiuterių mokslo tyrinėtojų stengėsi sukurti tobulą maišos funkciją – tokią, kuri nesukeltų susidūrimų ar grupių, atsižvelgiant į didėjantį apkrovos koeficientą. Teoriškai raktas į tobulą maišos lentelę yra sukurti tobulą maišos funkciją. Apskritai, mokslininkai mano, kad tobula maišos funkcija turi turėti pastovų veikimą – susidūrimų ir grupių skaičių – su didėjančiu apkrovos koeficientu. Blogiausiu atveju tobula maišos funkcija vis tiek leistų nuolat maišyti nepasiekus slenksčio.