Hajakoodaus Talletetaan alkiot avain-indeksoituun taulukkoon Hajakoodausfunktio Menetelmä avain-indeksin laskemiseen avaimesta Törmäyksen selvitysstrategia algoritmi ja tietorakenne käsittelemään tapaus jossa kaksi avainta kuvautuu samaan indeksin arvoon
Hajakoodausfunktio Hajakoodausfunktio h kuvaa kaikkien avaimien joukon U joukoksi {0,1,…,m-1} U k1k1 k5k5 k2k2 k4k4 k3k3 0 m-1 h(k 1 ) h(k 5 ) h(k 2 )= h(k 4 ) h(k 3 ) Kun kaksi avainta kuvautuu samaan indeksin arvoon tapahtuu törmäys.
Hajakoodausfunktio Tavoite: satunnainen kuvaus (kaikki indeksi yhtä todennäköisiä kaikille avaimille) Avaimia käsitellään pitkinä kokonaislukuina, taulukon koko M on alkuluku Hajakoodausfunktio: h(K) = K mod M Laske arvo Hornerin säännön avulla: Esim. abcd:n hajakoodausfunktion arvo on 11 97* * * = (256*(256*(256*97+98)+99) % 101 = 11 Numerot liian isoja? Lasketaan jakojäännös jokaisen operaation jälkeen (256* ) % 101 = 84 (256* ) % 101 = 90 (256* ) % 101 = 11 Universaali hajakoodaus: hajakoodausfunktion kerroin vaihtuu jokaisen koodattavan yksikön kohdalla.
Alkuluvut hajakoodaustaulukolle ndndn 2 n -d n Taulukko listaa suurimman 2 n :ää pienemmän alkukuvun.
Hajakoodausfunktio C-kielellä int haja(char *v, int n){ int h = 0, /* hajakoodin arvo */ a = 127; /* kokonaislukukerroin */ for(; *v != '\0'; v++) h = (a * h + *v) % n; return h; }
Universaali hajakoodausfunktio C-kielellä int hajaU(char *v, int n) { int h = 0, a = 31415, /* kokonaislukukerroin */ b = 27183; /* kokonaislukukerroin */ for(; *v != '\0'; v++, a = a * b % (n - 1)) h = (a * h + *v) % n; return h; }
Törmäyksen selvitysstrategiat Erillinen ketjutus Taulukon koko (M) paljon alkioiden lukumäärää pienempi (N) n. N/M alkiota jokaisessa taulukon indeksissä Samaan indeksiin kuvautuvat avaimet laitetaan linkitettyyn listaan Avoin osoitteistus (lineaarinen koestus, kaksoishajakoodaus) Taulukon koko paljon alkioiden lukumäärää suurempi Paljon tyhjiä paikkoja taulukossa Törmäyksen sattuessa etsitään vapaa paikka
Erillinen ketjutus Hajautetaan taulukolliseen linkitettyjä listoja Hajautus Kuvataan avain välille [0, M-1] Taulukko Viittaus listan alkuun vie vakioajan Linkitetyt listat Lisäys vie vakioajan Haku tapahtuu käyttäen alkeisalgoritmia M liian iso: paljon tyhjiä listoja M liian pieni: listat hyvin pitkiä I HS GR EPEE NC LAAA MX ASERCHINGXMPL
Lineaarinen koestus Hajakoodataan isoon taulukkoon, käytetään lineaarihakua klustereiden sisällä Hajakoodaus Kuvataan avain taulukon indeksiin välille [0,M-1] Iso taulukko Ainakin 2 kertaa alkioiden lukumäärä Klusteri Yhtenäinen lohko alkioita
Lineaarisen koestuksen esimerkki A ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE E ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE ER ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE SAER SACER ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE SAER SACER SHACER ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE SAER SACER SHACER SHACERI ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE SAER SACER SHACER SHACERI SHACERI ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE SAER SACER SHACER SHACERI SHACERI ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE SAER SACER SHACER SHACERI SHACERI ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE SAER SACER SHACER SHACERI SHACERI ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE SAER SACER SHACER SHACERI SHACERI ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE SAER SACER SHACER SHACERI SHACERIN ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE SAER SACER SHACER SHACERI SHACERIN GSHACERIN ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE SAER SACER SHACER SHACERI SHACERIN GSHACERIN GSHACERIN ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE SAER SACER SHACER SHACERI SHACERIN GSHACERIN GSHACERIN ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE SAER SACER SHACER SHACERI SHACERIN GSHACERIN GXSHACERIN ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE SAER SACER SHACER SHACERI SHACERIN GSHACERIN GXSHACERIN GXSHACERIN ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE SAER SACER SHACER SHACERI SHACERIN GSHACERIN GXSHACERIN GXSHACERIN ASERCHINGXM
Lineaarisen koestuksen esimerkki A SA SAE SAER SACER SHACER SHACERI SHACERIN GSHACERIN GXSHACERIN GXMSHACERIN ASERCHINGXM
Kaksoishajakoodaus Käyttää kahta erilaista hajakoodausfunktiota yhden kuvauksen muodostamiseen. Hajakoodaus Kuvataan avain taulukon indeksiin välille [0,M-1] Toinen hajakoodaus Kuvataan avain ( > 0) askellus arvoon (mielellään suhteellinen alkuluku M:lle.
Kaksoishajakoodaus esimerkki A ASERCHINGXM
Kaksoishajakoodaus esimerkki A SA ASERCHINGXM
Kaksoishajakoodaus esimerkki A SA SAE ASERCHINGXM
Kaksoishajakoodaus esimerkki A SA SAE ASERCHINGXM
Kaksoishajakoodaus esimerkki A SA SAE SAE ASERCHINGXM
Kaksoishajakoodaus esimerkki A SA SAE RSAE ASERCHINGXM
Kaksoishajakoodaus esimerkki A SA SAE RSAE ASERCHINGXM
Dynaaminen hajakoodaustaulu Taulun kokoa muutetaan tarpeen mukaan suuremmaksi.
Dynaamisen hajakoodauksen esimerkki A 0123 ASERCHINGXM 13
A AS 0123 ASERCHINGXM 13
A AS EAS ASERCHINGXM 5712
A AS EAS ASERCHINGXM 5712
A AS EAS ERAS ASERCHINGXM 5712
A AS EAS ERAS ESRA ASERCHINGXM