Mis on assotsiatiivne massiiv?

Assotsiatiivne massiiv, mida nimetatakse ka räsitabeliks või räsikaardiks, on sarnane standardmassiiviga, välja arvatud see, et massiivi indeks võib olla täisarvu asemel string. Paljudes andmebaasirakendustes ja muudes suurte andmemahtudega tegelevates programmides on assotsiatiivne massiiv ülioluline element, mis aitab tõhusal viisil teavet sorteerida ja sellele juurde pääseda. Assotsiatiivse massiivi tuumaks on tavaline massiiv, mis on indekseeritud täisarvudega, nagu tavaliselt. Spetsiaalne algoritm, mida nimetatakse räsifunktsiooniks, teisendab stringi indeksi väärtuse leidmiseks täisarvuindeksiks. See on järjepidev teisendus, nii et tegelikku täisarvu indeksit ei pea kunagi salvestama, vaid see arvutatakse iga kord vastavalt vajadusele stringist.

Assotsiatiivsele massiivile viitamisel kasutatav terminoloogia võib veidi erineda sellest, mida kasutatakse tavalisest massiivist rääkides. Seda, mida tavaliselt nimetatakse indeksiks – elemendi numbriline asukoht massiivi sees – nimetatakse võtmeks. Võtmega seotud andmeid nimetatakse väärtuseks. See tähendab, et assotsiatiivses massiivis on võti seotud väärtusega, mis on korrelatsioonis andmestruktuuri standardmassiivi elemendile viitava indeksiga.

Iga assotsiatiivse massiivi keskmes on räsifunktsioon. See on algoritm, mida kasutatakse võtme põhjal väärtuse arvindeksi määramiseks. Räsifunktsioone on mitut tüüpi, mõned neist on ette nähtud töötama täisarvuliste klahvidega ja mõned on loodud töötama klahvidega, mis on stringid. Täisarvulise võtme puhul on populaarne meetod jagada võtme väärtus massiivi suurusega ja kasutada ülejäänud jaotust, et saada loodetavasti kordumatu indeksi väärtus.

Räsifunktsioon võib stringidest koosnevate võtmete puhul olla palju keerulisem. Mõned meetodid hõlmavad stringi iga märgi numbrilise väärtuse lisamist ja seejärel jagamist mõne numbriga või ainult stringi paari esimese tähe kasutamist kordumatu numbri saamiseks. Arvu tuletamiseks märgijadast on palju võimalusi.

Kui käsitleda assotsiatiivses massiivis suure hulga võtme-väärtuste paare, nimetatakse ühte probleemi, mis võib tekkida, kokkupõrkeks. Kokkupõrge toimub siis, kui võtmest tuletatud täisarvu indeks on identne teise võtme täisarvu indeksiga. Need kaks võtit osutavad seejärel väärtuste massiivi samale indeksile. Kokkupõrke lahendusi on erinevaid, peamiselt seetõttu, et enamikus praktilistes rakendustes on selle juhtumise tõenäosus suur.

Üheks lahenduseks kokkupõrkeks on panna iga väärtuse indeks tegelikult olema lingitud loend, nii et kui sellesse indeksi asukohta jõuab rohkem kui üks võti, võib asukoht sisaldada rohkem kui ühte väärtust. Seda nimetatakse aheldamiseks ja see on lihtne viis kokkupõrke käsitlemiseks, kuigi see võib ka aeglustada teabe hankimiseks kuluvat aega. Teist meetodit kokkupõrke lahendamiseks nimetatakse lineaarseks sondeerimiseks. Kokkupõrke korral toimib lineaarne sondeerimine, liikudes läbi väärtuste massiivi, kuni leitakse kasutamata indeks. See lahendus aitab hoida andmeid assotsiatiivses massiivis ühtlaselt jaotunud, kuid võib ka pikendada väärtuse otsimiseks kuluvat aega.