HajakoodausHajakoodaus
Talletetaan alkiot avain-indeksoituun taulukkoon
Hajakoodausfunktio
Menetelmä avain-indeksin laskemiseenavaimesta
Törmäyksen selvitysstrategia
algoritmi ja tietorakenne käsittelemään tapausjossa kaksi avainta kuvautuu samaan indeksinarvoon
HajakoodausfunktioHajakoodausfunktio
Hajakoodausfunktio h kuvaa kaikkienavaimien joukon U joukoksi {0,1,…,m-1}
U
k1
k5
k2
k4
k3
0
m-1
h(k1)
h(k5)
h(k2)= h(k4)
h(k3)
Kun kaksi avainta kuvautuu samaan
indeksin arvoon tapahtuu törmäys.
HajakoodausfunktioHajakoodausfunktio
Tavoite: satunnainen kuvaus (kaikki indeksi yhtä todennäköisiä kaikilleavaimille)
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*2563+98*2562+99 *2561+100=
     (256*(256*(256*97+98)+99)+100
     16338831724 % 101 = 11
Numerot liian isoja?
Lasketaan jakojäännös jokaisen operaation jälkeen
     (256*97 +  98) % 101 = 84
     (256*84 +  99) % 101 = 90
     (256*90 +  100) % 101 = 11
Universaali hajakoodaus: hajakoodausfunktion kerroin vaihtuu jokaisenkoodattavan yksikön kohdalla.
AlkuluvuthajakoodaustaulukolleAlkuluvuthajakoodaustaulukolle
n
dn
2n-dn
8
5
251
9
3
509
10
3
1021
11
9
2039
12
3
4093
13
1
8191
14
3
16381
15
19
32749
16
15
65521
17
1
131071
18
5
262139
19
1
524287
20
3
1048573
21
9
2097143
Taulukko listaa suurimman 2n:ää
pienemmän alkukuvun.
Hajakoodausfunktio C-kielellä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 hajakoodausfunktioC-kielelläUniversaali hajakoodausfunktioC-kielellä
int hajaU(char *vint 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 selvitysstrategiatTö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 laitetaanlinkitettyyn 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 ketjutusErillinen 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
H
S
G
R
E
P
E
E
N
C
L
A
A
A
M
X
A
S
E
R
C
H
I
N
G
X
M
P
L
0
2
0
4
4
4
2
2
1
2
4
3
3
Lineaarinen koestusLineaarinen koestus
Hajakoodataan isoon taulukkoon, käytetäänlineaarihakua 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 koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
E
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
E
R
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
S
A
E
R
S
A
C
E
R
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
S
A
E
R
S
A
C
E
R
S
H
A
C
E
R
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
S
A
E
R
S
A
C
E
R
S
H
A
C
E
R
S
H
A
C
E
R
I
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
S
A
E
R
S
A
C
E
R
S
H
A
C
E
R
S
H
A
C
E
R
I
S
H
A
C
E
R
I
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
S
A
E
R
S
A
C
E
R
S
H
A
C
E
R
S
H
A
C
E
R
I
S
H
A
C
E
R
I
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
S
A
E
R
S
A
C
E
R
S
H
A
C
E
R
S
H
A
C
E
R
I
S
H
A
C
E
R
I
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
S
A
E
R
S
A
C
E
R
S
H
A
C
E
R
S
H
A
C
E
R
I
S
H
A
C
E
R
I
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
S
A
E
R
S
A
C
E
R
S
H
A
C
E
R
S
H
A
C
E
R
I
S
H
A
C
E
R
I
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
S
A
E
R
S
A
C
E
R
S
H
A
C
E
R
S
H
A
C
E
R
I
S
H
A
C
E
R
I
N
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
S
A
E
R
S
A
C
E
R
S
H
A
C
E
R
S
H
A
C
E
R
I
S
H
A
C
E
R
I
N
G
S
H
A
C
E
R
I
N
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
S
A
E
R
S
A
C
E
R
S
H
A
C
E
R
S
H
A
C
E
R
I
S
H
A
C
E
R
I
N
G
S
H
A
C
E
R
I
N
G
S
H
A
C
E
R
I
N
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
S
A
E
R
S
A
C
E
R
S
H
A
C
E
R
S
H
A
C
E
R
I
S
H
A
C
E
R
I
N
G
S
H
A
C
E
R
I
N
G
S
H
A
C
E
R
I
N
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
S
A
E
R
S
A
C
E
R
S
H
A
C
E
R
S
H
A
C
E
R
I
S
H
A
C
E
R
I
N
G
S
H
A
C
E
R
I
N
G
X
S
H
A
C
E
R
I
N
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
S
A
E
R
S
A
C
E
R
S
H
A
C
E
R
S
H
A
C
E
R
I
S
H
A
C
E
R
I
N
G
S
H
A
C
E
R
I
N
G
X
S
H
A
C
E
R
I
N
G
X
S
H
A
C
E
R
I
N
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
S
A
E
R
S
A
C
E
R
S
H
A
C
E
R
S
H
A
C
E
R
I
S
H
A
C
E
R
I
N
G
S
H
A
C
E
R
I
N
G
X
S
H
A
C
E
R
I
N
G
X
S
H
A
C
E
R
I
N
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
Lineaarisen koestuksenesimerkkiLineaarisen koestuksenesimerkki
A
S
A
S
A
E
S
A
E
R
S
A
C
E
R
S
H
A
C
E
R
S
H
A
C
E
R
I
S
H
A
C
E
R
I
N
G
S
H
A
C
E
R
I
N
G
X
S
H
A
C
E
R
I
N
G
X
M
S
H
A
C
E
R
I
N
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
KaksoishajakoodausKaksoishajakoodaus
Käyttää kahta erilaista hajakoodausfunktiota yhdenkuvauksen muodostamiseen.
Hajakoodaus
Kuvataan avain taulukon indeksiin välille [0,M-1]
Toinen hajakoodaus
Kuvataan avain ( > 0) askellus arvoon (mielelläänsuhteellinen alkuluku M:lle.
Kaksoishajakoodaus esimerkkiKaksoishajakoodaus esimerkki
A
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
1
3
1
5
5
5
3
3
2
3
5
Kaksoishajakoodaus esimerkkiKaksoishajakoodaus esimerkki
A
S
A
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
1
3
1
5
5
5
3
3
2
3
5
Kaksoishajakoodaus esimerkkiKaksoishajakoodaus esimerkki
A
S
A
S
A
E
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
1
3
1
5
5
5
3
3
2
3
5
Kaksoishajakoodaus esimerkkiKaksoishajakoodaus esimerkki
A
S
A
S
A
E
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
1
3
1
5
5
5
3
3
2
3
5
Kaksoishajakoodaus esimerkkiKaksoishajakoodaus esimerkki
A
S
A
S
A
E
S
A
E
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
1
3
1
5
5
5
3
3
2
3
5
Kaksoishajakoodaus esimerkkiKaksoishajakoodaus esimerkki
A
S
A
S
A
E
R
S
A
E
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
1
3
1
5
5
5
3
3
2
3
5
Kaksoishajakoodaus esimerkkiKaksoishajakoodaus esimerkki
A
S
A
S
A
E
R
S
A
E
0
1
2
3
4
5
6
7
8
9
10
11
12
A
S
E
R
C
H
I
N
G
X
M
7
3
9
9
8
4
11
7
10
12
0
1
3
1
5
5
5
3
3
2
3
5
Dynaaminen hajakoodaustauluDynaaminen hajakoodaustaulu
Taulun kokoa muutetaan tarpeen mukaansuuremmaksi.
Dynaamisen hajakoodauksenesimerkkiDynaamisen hajakoodauksenesimerkki
A
0
1
2
3
A
S
E
R
C
H
I
N
G
X
M
1
3
Dynaamisen hajakoodauksenesimerkkiDynaamisen hajakoodauksenesimerkki
A
A
S
0
1
2
3
A
S
E
R
C
H
I
N
G
X
M
1
3
Dynaamisen hajakoodauksenesimerkkiDynaamisen hajakoodauksenesimerkki
A
A
S
E
A
S
0
1
2
3
4
5
6
7
A
S
E
R
C
H
I
N
G
X
M
5
7
1
2
Dynaamisen hajakoodauksenesimerkkiDynaamisen hajakoodauksenesimerkki
A
A
S
E
A
S
0
1
2
3
4
5
6
7
A
S
E
R
C
H
I
N
G
X
M
5
7
1
2
Dynaamisen hajakoodauksenesimerkkiDynaamisen hajakoodauksenesimerkki
A
A
S
E
A
S
E
R
A
S
0
1
2
3
4
5
6
7
A
S
E
R
C
H
I
N
G
X
M
5
7
1
2
Dynaamisen hajakoodauksenesimerkkiDynaamisen hajakoodauksenesimerkki
A
A
S
E
A
S
E
R
A
S
E
S
R
A
0
1
2
3
4
5
6
7
8
9
10
11
12
13
A
S
E
R
C
H
I
N
G
X
M
13
7
1
10
7
8
5
6