Strukture podataka i algoritmi |
8.5.3 Hash funkcije |
Izbor dobre hash funkcije h(k) je osnovni problem kod koriscenja hash tabela za pretrazivanje. Funkcija h bi trebalo da raspodeli elemente naseg skupa sto je moguce ravnomernije u polja hash tabele. Kljucni kriterijum je da bi broj sudara trebalo da bude sto manji.
Ako je P(k) verovatnoca da se kljuc k pojavljuje u nasem skupu, tada bi, ako postoji m polja u nasoj hash tabeli, uniforma hash funkcija h(k) osigurala da:
Ponekad je ovo jednostavno obezbediti. Na primer, ako su kljucevi slucajno rasporedjeni u intervalu (0,r], tada funkcija
obezbedjuje ravnomerno hashiranje.
Posto smo preslikali kljuceve u skup prirodnih brojeva, imamo puno mogucnosti za hash funkciju.
h(k) = k mod m.
Pri koriscenju ovog metoda, izbegavaju se odredjene vrednosti m. Obicno se izbegavaju stepeni dvojke, jer k mod 2b jednostavno daje b najnizih bitova broja k. Osim u slucaju da znamo da su svih 2b mogucih vrednosti najnizih bitova podjednako verovatne, ovo ne bi bio dobar izbor, jer se neki bitovi kljuca ne koriste u hash funkciji.
U principu, prosti brojevi koji su bliski stepenima dvojke izgledaju kao povoljan izbor za m.
Na primer, ako imamo 4000 elemenata, i izabrali smo organizaciju sa oblascu prelivanja, ali zelimo da sto je vise moguce smanjimo verovatnocu sudara, tada bismo mogli da izaberemo m = 4093. (4093 je najveci ceo broj manji od 4096 = 212.)
Prema tome, hash funkcija je:
U ovom slucaju, vrednost m nije kriticna i obicno se bira stepen dvojke, tako da mozemo da dobijemo sledecu efikasnu proceduru na vecini racunara:
Izgleda da je
veoma dobar izbor (videti Knuth, "Sorting and Searching", 3. tom u seriji "The Art of Computer Programming").
Zlobni protivnik bi uvek mogao da izabere kljuceve tako da se oni svi preslikavaju u isto polje hash tabele, prouzrokujuci prosecno O(n) vreme za pretrazivanje. Univerzalno hashiranje pokusava da izbegne ovu situaciju birajuci hash funkciju slucajno iz skupa hash funkcija. Ovo smanjuje verovatnocu da ce hash funkcija dati lose ponasanje i u proseku daje dobre performanse.
Kljucni pojmovi |
Dalje na Algoritamske tehnike Nazad na Sadrzaj |