Kaj je asociativni niz?

Asociativna matrika, imenovana tudi hash tabela ali preslikava razpršitve, je podobna standardnemu nizu, le da je indeks matrike lahko niz namesto celega števila. V številnih aplikacijah baz podatkov in v drugih programih, ki se ukvarjajo z velikimi količinami podatkov, je asociativni niz bistven element pri učinkovitem razvrščanju in dostopu do informacij. V jedru asociativnega niza je standardni niz, ki je indeksiran s celimi števili, kot bi bilo običajno. Poseben algoritem, imenovan hash funkcija, pretvori indeks niza v celoštevilski indeks, da najde vrednost. To je dosledna pretvorba, tako da dejanskega celoštevilskega indeksa nikoli ni treba shraniti, ampak se namesto tega vsakič izračuna iz niza, kot je potrebno.

Terminologija, uporabljena pri sklicevanju na asociativno matriko, se lahko nekoliko razlikuje od tiste, ki se uporablja, ko govorimo o običajnem nizu. Kar bi običajno imenovali indeks – številčna lokacija elementa znotraj matrike – se imenuje ključ. Podatki, povezani s ključem, se imenujejo vrednost. To pomeni, da je znotraj asociativnega niza ključ povezan z vrednostjo, ki je povezana z indeksom, ki se sklicuje na element v standardnem nizu v strukturi podatkov.

V središču vsakega asociativnega niza je hash funkcija. To je algoritem, ki se uporablja za določanje številčnega indeksa vrednosti na podlagi ključa. Obstaja več vrst zgoščenih funkcij, nekatere so zasnovane za delovanje s ključi, ki so cela števila, druge pa za delovanje s ključi, ki so nizi. V primeru celoštevilskega ključa je priljubljena metoda deliti vrednost ključa z velikostjo matrike in uporabiti preostanek delitve, da bi, upajmo, dobili edinstveno vrednost indeksa.

Funkcija zgoščevanja je lahko veliko bolj zapletena za ključe, ki so nizi. Nekatere metode vključujejo seštevanje številčne vrednosti vsakega znaka v nizu in nato deljenje z določeno številko ali uporabo samo prvih nekaj znakov niza, da dobimo edinstveno številko. Obstaja veliko načinov za izpeljavo števila iz niza znakov.

Pri obravnavanju velike količine parov ključ/vrednost v asociativnem nizu se ena težava, ki se lahko pojavi, imenuje trčenje. Do kolizije pride, ko je celoštevilski indeks, izpeljan iz ključa, identičen celemu indeksu drugega ključa. Ta dva ključa nato dejansko kažeta na isti indeks v nizu vrednosti. Obstajajo različne rešitve za trčenje, predvsem zato, ker ima veliko verjetnost, da se zgodi v večini praktičnih aplikacij.

Ena od rešitev za kolizijo je, da je vsak indeks vrednosti dejansko povezan seznam, tako da lahko lokacija vsebuje več kot eno vrednost, ko se več kot en ključ razreši na to lokacijo indeksa. To se imenuje veriženje in je preprost način obvladovanja trka, čeprav lahko tudi upočasni čas, potreben za pridobivanje informacij. Druga metoda obravnave trka se imenuje linearno sondiranje. Ko pride do trka, linearno sondiranje deluje tako, da se premika po nizu vrednosti, dokler se ne najde neuporabljen indeks. Ta rešitev lahko pomaga ohranjati enakomerno porazdelitev podatkov v asociativnem nizu, lahko pa tudi poveča čas, potreben za iskanje vrednosti.