Upload
ivan-ivanic
View
225
Download
3
Embed Size (px)
DESCRIPTION
Strukture podataka i algoritmi
Citation preview
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi 2012/2013
HASH TABLICA
raspreno adresiranje
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
RASPRENO ADRESIRANJE
tehnika kojom se dani klju K koji predstavlja dio ili cijeli podatak P, pomou funkcije h(K) transformira u vrijednost koja predstavlja indeks tablice (niza) u koju se podatak P ima spremiF
zove se jo i hashiranje
tablica se jo zove i hash tablica pri emu se elemenF tablice zovu i depovi
funkcija h se jo zove i hash funkcija
2
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH FUNKCIJA
funkcija najee djeluje nad jednim dijelom sloenog Fpa podatka (structa)
taj dio (klju) moe biF broj, string ali i neki drugi struct.
ciljevi hash funkcije jesu rasporediF elemente u hash tablici
- proporcionalno
- sluajno
- ravnomjerno
funkcija koja razliite kljueve K pretvara u razliite indekse tablice naziva se savrenom hash funkcijom
3
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH FUNKCIJA
4
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH FUNKCIJA - SVOJSTVA
Dobru hash funkciju odlikuju
- mali troak raunanja
- determinizam (isF ulaz -> isF izlaz)
- jednoznanost (vjerojatnost generiranja svake izlazne vrijednosF otprilike jednaka)
5
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH FUNKCIJA
najjednostavnija hash funkcija
6
int index = a.klju % N
mjesto u nizu na koje se smjeta
podatak
vrijednost po kojoj hashiramo
broj elemenata niza tj. hash tablice
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH FUNKCIJA
Modulo - ostatak pri dijeljenju
- h(K) = K mod T
Primarni nedostatak ove metode je to se uzastopni kljuevi preslikavaju u uzastopne hash vrijednosF
esto se korisF kada se malo zna o kljuevima
PRIMJER:
- Izraunaj hash vrijednost kljua 1234 ako tablica ima 100 depova
- T = 100
- K = 1234
- h(1234) = 1234%100 = 34
7
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH FUNKCIJA
ovo je nedovoljno budui da klju nee uvijek biF integer ve i string
takoer, koritenjem operacije modulo (%) kljuevi kojih ima mnogo su stjerani u mali prostor
prema Dirichletovom principu u jedno mjesto u hash tablicu e zavriF 2 ili vie podataka
17 % 71 i 1650 % 71
8
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH FUNKCIJA - KOLIZIJA
Kolizija nastaje kada hash funkcija preslika dva kljua na istu hash vrijednost.
Kako se dva podatka ne mogu pohraniF na istoj lokaciji, potrebno je pronai nain kojim se moe rijeiF problem kolizije a svode se na
- poboljanje hash funkcije
- modikaciju hash tablice
Ti naini zovu se tehnike razrjeavanja kolizije
9
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH FUNKCIJA
Metoda mnoenja
1. odabraF konstantu A takvu da je 0
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH FUNKCIJA
Metoda slaganja
1. parFcioniraF klju na n dijelova k1 ,k2, k3, , kn tako da svi dijelovi osim posljednjeg imaju jednak broj znamenaka
2. dijelove zbrojiF kako bi se odredila hash vrijednost
3. ako postoji posljednji prijenos, on se zanemaruje
- Broj znamenaka svakog dijela kljua ovisi o veliini hash tablice, stoga ako tablica ima 1000 depova koji se mogu adresiraF, za njihovo adresiranje su potrebne 3 znamenke - svaki dio ki (osim zadnjeg) stoga mora imaF 3 znamenke
- postoje dvije vrste slaganja
shi; folding - posloi/ ki-ove jedan ispod drugog boundary folding - posloi/ ki-ove oko srednjeg poput presavijanja papira
11
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH FUNKCIJA
Metoda slaganja - shi; folding
Metoda slaganja - boundary folding
12
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
KOLIZIJA - POBOLJANJE HASH FUNKCIJE
h1(ime) = ime[0]
h2(ime) = ime[0] + ime[1]
h3(ime) = ime[0] + ime[1] + ... + ime[strlen(ime) - 1]
...
hn(ime) = ...
13
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH FUNKCIJA - 2
AdiFvno hashiranje
- vjerojatno najjednostavniji algoritam za hashiranje kljueva koji su stringovi je zbrojiF vrijednosF i onda na taj zbroj primijeniF operaciju modulo
14
static int AditivniHash (string kljuc, int N){" int h = 0, i, d;" "" d = kljuc.Length;"" for (i=0; i
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH FUNKCIJA - 3
XOR hashiranje
- umjesto zbrajanja byteova kao kod adiFvnog hashiranja, ovdje se byteovi neprestano slau kako bi dobili naizgled sluajnu hash vrijednost
15
static int XORHash (string kljuc){" int h = 0, i, d;" "" d = kljuc.Length;"" for (i=0; i
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH FUNKCIJA - 3
RoFrajue hashiranje
- umjesto jednostavnog slaganja svakog bytea unosa u unutarnje stanje, ovo hashiranje korisF preslagivanje unutarnjeg stanja prije slijedeeg unosa.
16
static int RotHash (string kljuc){" int h = 0, i, d;" "" d = kljuc.Length;"" for (i=0; i 28 ) ^ p[i];" "" return h;}
sve ok?
> = bitovno pomicanje u desno
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH FUNKCIJA - 4
Bernstein-Torek hashiranje
- ovo hashiranje je vrlo pogodno kada su kljuevi maleni, gdje se pokazuje boljim od ostalih hashiranja. Izumio ga je Bernstein a popularizirao Torek.
17
static int BTHash (string kljuc, int d){" int h = 0, i, d;" "" d = kljuc.Length;"" for (i=0; i
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH FUNKCIJA - 5
Modicirano Bernstein-Torek hashiranje
- modikacija je u tome to umjesto zbrajanja korisFmo preslagivanje pomou XOR funkcije. nije iroko rasprostranjena jer je algoritam dobar i bez modikacije, ali ovaj ima bolju distribuciju
18
static int XORHash (string kljuc, int d){" int h = 0, i, d;" "" d = Duljina(kljuc);"" for (i=0; i
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH FUNKCIJA - 6
Shij-Add-XOR hashiranje
- vrlo slino roFrajuem hashiranju, no koriste se druge konstante te zbrajanje umjesto preslagivanja. vrlo uinkovit algoritam.
19
static int SAXHash (string kljuc, int d){" int h = 0, i, d;" "" d = kljuc.Length;"" for (i=0; i 2 ) + p[i];" "" return h;}
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH FUNKCIJA - 7
1-po-1 hashiranje
20
static int 1po1Hash (string kljuc, int d){" int h = 0, i, d;" "" d = Duljina(kljuc);" for ( i = 0; i < d; i++ ) {
h += p[i]; h += ( h > 6 ); } h += ( h > 11 ); h += ( h
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
KOLIZIJA - MODIFIKACIJA HASH TABLICE
Dvije najee metode
- otvoreno adresiranje
- ulanavanje
21
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
KOLIZIJA - MODIFIKACIJA HASH TABLICE - OTVORENO ADRESIRANJE
Kada se dogodi kolizija, otvoreno adresiranje rauna novu adresu koristei testni niz i naredni zapis posprema se na tu adresu
Tablica sadri dva Fpa vrijednosF
- indikator (npr. -1)
- vrijednost podatka
Ako se na nekoj adresi nalazi indikator
- ta lokacija je slobodna za pohranu vrijednosF
Ako se na nekoj adresi ne nalazi indikator ve vrijednost
- pregledava se prva sljedea slobodna lokacija te se na nju sprema vrijednost
- ako niF jedan dep nije slobodan - tablica se nalazi u stanju preljeva
Ova tehnika se moe implemenFraF koristei
- linearno tesFranje (provjeravaju se sljedea polja 1 po 1)
- kvadratno tesFranje (provjerava se 1. pa 4. pa 9. pa 16. pa 25. sljedee polje)
22
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
KOLIZIJA - LINEARNO TESTIRANJE
23
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
KOLIZIJA - KVADRATNO TESTIRANJE
24
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
KOLIZIJA - MODIFIKACIJA HASH TABLICE - ULANAVANJE
Ovdje svaki element hash tablice sadri pokaziva na vezanu listu koja sadri sve vrijednosF koje su hashirane na istu lokaciju
25
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
TELEFONSKI IMENIK
Ideja zadatka
- napraviF niz od 26 pokazivaa, budui da engleska abeceda poznaje 26 znakova
- elemenF se u odgovarajui redak niza unose obzirom na prvo slovo nadimka pod kojim unosimo kontakt u imenik.
- ispisaF cjelokupni imenik
- pronai sve osobe iji nadimak poinje isFm slovom
26
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
TELEFONSKI IMENIK
Realizacija zadatka - telefonski imenik
- valja se prisjeFF ASCII vrijednosF znakova engleske abecede
- pomou funkcija ASCII() i ZNAK() koje emo sami napraviF dobit emo ASCII vrijednost pojedinog znaka i obrnuto, znak koji odgovara pojedinoj vrijednosF.
27
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH TABLICA - BESKONANI HOTEL
Postoji jedan hotel sa samo 3 kata i beskonano mnogo soba. Taj hotel odabran je za domaina sastanka delegacija iz svih zemalja svijeta. Upravitelj hotela zadovoljno trlja ruke ali naziru se problemi.
Brazilci ne ele biF na prvom katu, Englezi ne ele biF na istom katu s Brazilcima, a Japanci ele biF barem 3 kata iznad Engleza, a to je tek poetak posebnih prohtjeva ovih zahtjevnih gosFju.
Upravitelj se dosjeFo da sagradi dodatne katove, gdje svaki od njih opet ima beskonano mnogo soba, a sve kako bi udovoljio eljama svojih gosFju.
28
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH TABLICA - BESKONANI HOTEL
Ideja zadatka
- napraviF vezanu listu gdje svaki element pokazuje na gornji kat, ali i na prvu zauzetu sobu na tom katu.
- sobe su takoer elemenF u vezanoj lisF gdje svaki element pokazuje na slijedeu zauzetu sobu te sadri podatke o broju sobe kao i o gostu
- gost se mora moi prijaviF u hotel te odabraF kat i sobu u kojoj eli odsjesF
- gost se mora moi odjaviF iz hotela
- upravitelj mora moi poruiF neiskoritene katove
- upravitelj mora moi vidjeF zauzee svake sobe na svakom katu
29
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH TABLICA - BESKONANI HOTEL
Realizacija zadatka - denirajmo kat i sobu
30
soba kat
klasa sobica- brsobe- gost- sobica next
klasa kat- brkat- sobica soba- kat next
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH TABLICA - BESKONANI HOTEL
Realizacija zadatka - Prijava u hotel
- gost bira kat na kojem eli odsjesF. valja osiguraF da odabere poziFvan broj
- utvrdiF postoji li taj kat ili ga treba sagradiF
ukoliko ga treba sagradi/, potrebno ga je sagradi/ na pravom mjestu 5. kat izmeu 3. i 18. kata
- jednom kada je utvreno da kat postoji (ili je upravo sagraen) moemo smjesFF gosta
- gost odabire sobu s Fm da valja vodiF rauna da se gostu ne ponudi ve zauzeta soba
31
Odjel za Informa/ku - PMFSTStrukture podataka i algoritmi / 32
HASH TABLICA - BESKONANI HOTEL
Realizacija zadatka - Naputanje hotela
- gost na recepciji kazuje na kojem katu je odsjeo - provjeriF da je to valjan kat
- zaFm kazuje u kojoj sobi je odsjeo - provjeriF da je to valjana soba
- nakon podmirenja rauna, gosta se brie iz evidencije hotela
- ako je hotel napusFo posljednji gost na zadnjem katu hotela, valjalo bi poruiF taj kat jer porezna uprava kontrolira nekoritene katove
- nakon to hotel napusF i posljednji gost, upravitelj ga rui radi prevelikog poreza i odlazi na Bahame.
32