32
© Odjel za Informa/ku PMFST Strukture podataka i algoritmi 2012/2013 HASH TABLICA raspršeno adresiranje

Hash

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