Kas yra asociatyvus masyvas?

Asociatyvus masyvas, dar vadinamas maišos lentele arba maišos žemėlapiu, yra panašus į standartinį masyvą, išskyrus tai, kad masyvo indeksas gali būti eilutė, o ne sveikasis skaičius. Daugelyje duomenų bazių programų ir kitose programose, kuriose dirbama su dideliais duomenų kiekiais, asociatyvus masyvas yra gyvybiškai svarbus elementas, padedantis efektyviai rūšiuoti ir pasiekti informaciją. Asociatyvaus masyvo esmė yra standartinis masyvas, indeksuojamas sveikaisiais skaičiais, kaip paprastai. Specialus algoritmas, vadinamas maišos funkcija, konvertuoja eilutės indeksą į sveikųjų skaičių indeksą, kad surastų reikšmę. Tai yra nuosekli konversija, todėl tikrojo sveikojo skaičiaus indekso niekada nereikia saugoti, o kiekvieną kartą, jei reikia, jis apskaičiuojamas pagal eilutę.

Terminai, vartojami kalbant apie asociatyvų masyvą, gali šiek tiek skirtis nuo tos, kuri vartojama kalbant apie įprastą masyvą. Tai, kas paprastai būtų vadinama indeksu – skaitinė elemento vieta masyve – vadinama raktu. Duomenys, susieti su raktu, vadinami verte. Tai reiškia, kad asociatyviame masyve raktas yra susietas su reikšme, kuri koreliuoja su indeksu, nurodančiu elementą standartiniame duomenų masyve.

Kiekvieno asociatyvaus masyvo esmė yra maišos funkcija. Tai algoritmas, naudojamas reikšmės skaitiniam indeksui nustatyti pagal raktą. Yra keletas maišos funkcijų tipų, kai kurios skirtos veikti su raktais, kurie yra sveikieji skaičiai, o kai kurie skirti dirbti su klavišais, kurie yra eilutės. Sveikojo skaičiaus rakto atveju populiarus metodas yra padalyti rakto reikšmę iš masyvo dydžio ir panaudoti likusią padalijimo dalį, kad, tikėkimės, gautumėte unikalią indekso reikšmę.

Maišos funkcija gali būti daug sudėtingesnė raktams, kurie yra eilutės. Kai kurie metodai apima kiekvieno eilutės simbolio skaitinės vertės pridėjimą ir padalijimą iš tam tikro skaičiaus arba tik kelių pirmųjų eilutės simbolių naudojimą, kad gautumėte unikalų skaičių. Yra daug būdų, kaip gauti skaičių iš simbolių eilutės.

Nagrinėjant daug rakto-reikšmių porų asociatyviame masyve, viena galinti kilti problema vadinama susidūrimu. Susidūrimas įvyksta, kai sveikojo skaičiaus indeksas, gautas iš rakto, yra identiškas kito rakto sveikojo skaičiaus indeksui. Tada šie du raktai veiksmingai nurodo tą patį indeksą reikšmių masyve. Yra įvairių susidūrimo sprendimų, daugiausia dėl to, kad daugumoje praktinių pritaikymų jis turi didelę tikimybę.

Vienas iš susidūrimo sprendimų yra tai, kad kiekvienas reikšmių indeksas iš tikrųjų būtų susietas sąrašas, kad, kai daugiau nei vienas raktas nukreipiamas į tą indekso vietą, vieta gali turėti daugiau nei vieną reikšmę. Tai vadinama grandine ir yra paprastas susidūrimo valdymo būdas, tačiau taip pat gali sulėtėti informacijos gavimo laikas. Kitas susidūrimo sprendimo būdas vadinamas linijiniu zondavimu. Kai įvyksta susidūrimas, linijinis zondavimas veikia judant per reikšmių masyvą, kol randamas nenaudojamas indeksas. Šis sprendimas gali padėti tolygiai paskirstyti duomenis asociatyviniame masyve, tačiau taip pat gali pailginti laiką, reikalingą reikšmei surasti.