k ozvetlen c mz esu^ t abl azatok - sapientia emtekasa/adat12.pdfhas t ot abl azatok has t ot abl...

18
Has´ ıt´ ot´ abl´ azatok has´ ıt´ ot´ abl´ azatok angolul: hash tables, has´ ıt´ as: hashing Ha nagy mennyis´ eg˝ u adatb´ ol gyakorlatilag csak keveset haszn´ alunk, akkor nem ´ erdemes minden adatnak helyet foglalni, elegend˝ o csak a leggyakrabban haszn´ altaknak. A strukt´ ura, amely lehet˝ ov´ e teszi ezt, ´ es megoldja az adatok besz´ ur´ as´ at, keres´ es´ et, t¨ orl´ es´ et, az a has´ ıt´ ot´ abl´ anak (hash abl´ anak) nevezett szerkezet. Egy adat hely´ et a t´ abl´ aban az adott adat kulcs´ ara alkalmazott has´ ıt´ of¨ uggv´ eny (hash uggv´ eny) adja meg. Nem t´ evesztend˝ ossze a kriptogr´ afi´ aban haszn´ alt has´ ıt´ assal! Err˝ ol l´ asd: Kriptogr´ afiai hashf¨ uggv´ eny Cryptographic hash function 1

Upload: others

Post on 22-Jan-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: K ozvetlen c mz esu^ t abl azatok - Sapientia EMTEkasa/adat12.pdfHas t ot abl azatok has t ot abl azatok angolul:hash tables, has t as:hashing Ha nagy mennyis egu} adatb ol gyakorlatilag

Hasıtotablazatokhasıtotablazatok angolul: hash tables,hasıtas: hashing

Ha nagy mennyisegu adatbol gyakorlatilag csak kevesethasznalunk, akkor nem erdemes minden adatnak helyetfoglalni, elegendo csak a leggyakrabban hasznaltaknak. Astruktura, amely lehetove teszi ezt, es megoldja az adatokbeszurasat, kereseset, torleset, az a hasıtotablanak (hashtablanak) nevezett szerkezet. Egy adat helyet a tablabanaz adott adat kulcsara alkalmazott hasıtofuggveny (hashfuggveny) adja meg.

Nem tevesztendo ossze a kriptografiabanhasznalt hasıtassal! Errol lasd:

Kriptografiai hashfuggveny

Cryptographic hash function

1

Page 2: K ozvetlen c mz esu^ t abl azatok - Sapientia EMTEkasa/adat12.pdfHas t ot abl azatok has t ot abl azatok angolul:hash tables, has t as:hashing Ha nagy mennyis egu} adatb ol gyakorlatilag

Kozvetlen cımzesu tablazatok

U kulcsunivezum, T tomb (T0, T1, . . . , Tm−1): kozvetlen cımzesutablazat

A tablazat minden helye – res – megfelel U egy kulcsanak.

2

Page 3: K ozvetlen c mz esu^ t abl azatok - Sapientia EMTEkasa/adat12.pdfHas t ot abl azatok has t ot abl azatok angolul:hash tables, has t as:hashing Ha nagy mennyis egu} adatb ol gyakorlatilag

Muveletek

Kozvetlen-cımzesu-kereses(T, k)

1. return Tk

Kozvetlen-cımzesu-beszuras(T, x)

1. Tkulcs[x] := x

Kozvetlen-cımzesu-torles(T, x)

1. Tkulcs[x] := nil

3

Page 4: K ozvetlen c mz esu^ t abl azatok - Sapientia EMTEkasa/adat12.pdfHas t ot abl azatok has t ot abl azatok angolul:hash tables, has t as:hashing Ha nagy mennyis egu} adatb ol gyakorlatilag

hasıtotablazatok

h hasıtofuggveny alapjan a k kulcsu elem a h(k) helyrekerul.

h : U −→ {0, 1, . . . ,m− 1}

h(k) a kulcs hasıtott erteke

utkozes, ha k 6= l es h(k) = h(l).

4

Page 5: K ozvetlen c mz esu^ t abl azatok - Sapientia EMTEkasa/adat12.pdfHas t ot abl azatok has t ot abl azatok angolul:hash tables, has t as:hashing Ha nagy mennyis egu} adatb ol gyakorlatilag

Muveletek

Lancolt-hasıto-kereses(T, k)

1. a k kulcsu elem keresese a Th(k) listaban

Lancolt-hasıto-beszuras(T, x)

1. x beszurasa a Th(kulcs[x]) lista elejere

Lancolt-hasıto-torles(T, x)

1. x torlese a Th(kulcs[x]) listabol

5

Page 6: K ozvetlen c mz esu^ t abl azatok - Sapientia EMTEkasa/adat12.pdfHas t ot abl azatok has t ot abl azatok angolul:hash tables, has t as:hashing Ha nagy mennyis egu} adatb ol gyakorlatilag

hasıtofuggvenyek

m res, a kulcsok egyenletes eloszlasuak, es 0 ≤ k < 1,akkor

h(k) = bkmc — egyenletes hasıtas

A kulcsok termeszetes szamokkal valo abrazolasaN = {0, 1, 2, . . . , }ASCII-kod haznalata: pt: (112, 116)

pt abrazolhato pl. 112·128+116 = 14 452 (128-as szamrendszerben)

• osztasos modszer

h(k) = k mod m (C-ben h(k) = k%m)

pl. m = 14, k = 135, akkor h(k) = 9 (mert: 14 · 9 + 9 = 135).

m = 2p nem tul jo,m jo, ha nem kozeli prımszam kettohatvanyhoz

2000 kulcsnal pl. m = 701, tehat h(k) = k mod 701.

6

Page 7: K ozvetlen c mz esu^ t abl azatok - Sapientia EMTEkasa/adat12.pdfHas t ot abl azatok has t ot abl azatok angolul:hash tables, has t as:hashing Ha nagy mennyis egu} adatb ol gyakorlatilag

• szorzasos modszer

0 < A < 1, h(k) =⌊m(kA mod 1)

⌋, ahol

kA mod 1 = kA− bkAc.

Knuth javaslata: A ≈√5− 1

2≈ 0, 6180339887 . . .

• univerzalis hasıtas

a hasıtofuggvenyt veletlenul, az aktualisan tarolando kul-csoktol fuggetlenul valasztjuk

7

Page 8: K ozvetlen c mz esu^ t abl azatok - Sapientia EMTEkasa/adat12.pdfHas t ot abl azatok has t ot abl azatok angolul:hash tables, has t as:hashing Ha nagy mennyis egu} adatb ol gyakorlatilag

Nyılt cımzes

az elemeket a hasıtotablaban taroljukkiprobalas: ha a hasıtofuggveny nyujtotta hely foglalt, ad-dig keresunk, mıg ures helyet talalunk

hasıtofuggveny:

h : U × {0, 1, . . . ,m− 1} → {0, 1, . . . ,m− 1}

fontos, hogy a

h(k, 0), h(k, 1), . . . , h(k,m− 1)

kiprobalasi sorozat a 0, 1, 2, . . . ,m− 1 permutacioja legyen

Pelda.m = 13, a beszurando elemek: 20, 30, 33, 17, 25, 51

20 maradek 7

| | | | | | |20| | | | |0 1 2 3 4 5 6 7 8 9 10 11 12

30 maradek 4

| | | |30| | |20| | | | |0 1 2 3 4 5 6 7 8 9 10 11 12

8

Page 9: K ozvetlen c mz esu^ t abl azatok - Sapientia EMTEkasa/adat12.pdfHas t ot abl azatok has t ot abl azatok angolul:hash tables, has t as:hashing Ha nagy mennyis egu} adatb ol gyakorlatilag

33 maradek 7, foglalt, tehat i = 1, maradek 8.

| | | |30| | |20|33| | | |0 1 2 3 4 5 6 7 8 9 10 11 12

17 maradek 4, foglalt, tehat i = 1, maradek 5.

| | | |30|17| |20|33| | | |0 1 2 3 4 5 6 7 8 9 10 11 12

25 maradek 12

| | | |30|17| |20|33| | | |250 1 2 3 4 5 6 7 8 9 10 11 12

51 maradek 12, de foglalt, ezert i = 1, es a maradek 0.

51| | | |30|17| |20|33| | | |250 1 2 3 4 5 6 7 8 9 10 11 12

9

Page 10: K ozvetlen c mz esu^ t abl azatok - Sapientia EMTEkasa/adat12.pdfHas t ot abl azatok has t ot abl azatok angolul:hash tables, has t as:hashing Ha nagy mennyis egu} adatb ol gyakorlatilag

Hasıto-beszur(T, k)

1. i := 0

2. repeat j := h(k, i)

3. if Tj = nil

4. then Tj := k

5. return

6. else i := i + 1

7. until i = m

8. error ”tulcsordulas”

Hasıto-keres(T, k)

1. i := 0

2. repeat j := h(k, i)

3. if Tj = k

4. then return j

5. i := i + 1

6. until Tj = nil vagy i = m

7. return nil

kiprobalasi modszerek:• linearis kiprobalas• negyzetes kiprobalas• dupla hasıtas

10

Page 11: K ozvetlen c mz esu^ t abl azatok - Sapientia EMTEkasa/adat12.pdfHas t ot abl azatok has t ot abl azatok angolul:hash tables, has t as:hashing Ha nagy mennyis egu} adatb ol gyakorlatilag

• linearis kiprobalaskozonseges hasıtofuggveny : h′ : U → {0, 1, . . . ,m− 1},legyen

h : U × {0, 1, . . . ,m− 1} → {0, 1, . . . ,m− 1}

h(k, i) =(h′(k) + i

)mod m

A kiprobalas a kovetkezo reseken tortenik:

Th′(k), Th′(k)+1, . . . , Tm−1, T0, T1, . . . , Th′(k)−1

• negyzetes kiprobalas

h(k, i) =(h′(k) + c1i + c2i

2)mod m, c2 6= 0

• dupla hasıtas

h(k, i) =(h1(k) + ih2(k)

)mod m,

ahol h1, h2 kisegıto hasıtofuggvenyek

11

Page 12: K ozvetlen c mz esu^ t abl azatok - Sapientia EMTEkasa/adat12.pdfHas t ot abl azatok has t ot abl azatok angolul:hash tables, has t as:hashing Ha nagy mennyis egu} adatb ol gyakorlatilag

Pelda. Az abran levo elemeket a kovetkezo sorrendbenszurtuk be:

79, 69, 72, 50, 98, 14.

12

Page 13: K ozvetlen c mz esu^ t abl azatok - Sapientia EMTEkasa/adat12.pdfHas t ot abl azatok has t ot abl azatok angolul:hash tables, has t as:hashing Ha nagy mennyis egu} adatb ol gyakorlatilag

Legyen h(k) = (h1(k) + ih2(k))mod 13, ahol

h1(k) = kmod 13

h2(k) = 1 + (kmod 11)

Kezdetben i = 0. Utkozeskor noveljuk.

h1(79) = 1, tehat 79 bekerul az 1. helyreh1(69) = 4, tehat 69 bekerul az 4. helyreh1(72) = 7, tehat 72 bekerul az 7. helyreh1(50) = 11, tehat 50 bekerul az 11. helyreh1(98) = 7, de a 7. hely foglalt, exert:

h2(98) = 11, es i = 1

h(98) = (h1(98) + h2(98))mod 13 =

= (7 + 11)mod 13 = 5,

tehat 98 bekerul az 5. helyreh1(14) = 1, de az 1. hely foglalt, exert:

h2(14) = 4, es i = 1

h(14) = (h1(14) + h2(14))mod 13 = (1 + 4)mod 13 = 5,de az 5. hely foglalt, ezert i = 2 esetreh(14) = 1 + 2 · 4 = 9, tehat 14 a 9. helyre kerul

13

Page 14: K ozvetlen c mz esu^ t abl azatok - Sapientia EMTEkasa/adat12.pdfHas t ot abl azatok has t ot abl azatok angolul:hash tables, has t as:hashing Ha nagy mennyis egu} adatb ol gyakorlatilag

h2(k) es m relatıv prımekpl. m prım, es

h1(k) = k mod m

h2(k) = 1 + (k mod m′)

ahol m′ = m− 1 vagy m− 2.

Tokeletes hasıtas

ha a kereseshez szukseges memoriaolvasasok szama kons-tans, azaz O(1)

otlet: ketszıntu hasıtas, lancolas helyett egy masodlagoshasıtotablat hasznalunk

a j-edik reshez az Sj masodlagos hasıtotabla tartozik, hj

hasıtofuggvennyel, mj merettel (amely a lehetseges kulc-sok szamanak negyzete)

14

Page 15: K ozvetlen c mz esu^ t abl azatok - Sapientia EMTEkasa/adat12.pdfHas t ot abl azatok has t ot abl azatok angolul:hash tables, has t as:hashing Ha nagy mennyis egu} adatb ol gyakorlatilag

h(k) =((ak + b) mod p

)mod m,

Peldankban a = 3, b = 42, p = 101,m = 9

hj(k) =((ajk + bj) mod p

)mod mj

15

Page 16: K ozvetlen c mz esu^ t abl azatok - Sapientia EMTEkasa/adat12.pdfHas t ot abl azatok has t ot abl azatok angolul:hash tables, has t as:hashing Ha nagy mennyis egu} adatb ol gyakorlatilag

Tehath(k) =

((3k + 42) mod 101

)mod 9

es

hj(k) =((ajk + bj) mod p

)mod mj

azaz

h0(k) =((0 · k + 0) mod 101

)mod 1

h2(k) =((10k + 18) mod 101

)mod 4

h7(k) =((23k + 88) mod 101

)mod 9

Helyezzuk el a 37-et!

h(37) =((3·37+42) mod 101

)mod 9 = (153 mod 101) mod 9 =

= 52 mod 9 = 7, tehat a 7. masodlagos tablaba kerul.

h7(37) =((23·37+88) mod 101

)mod 9 = (939 mod 101) mod 9 =

= 30 mod 9 = 3, tehat a 4. helyre kerul.

16

Page 17: K ozvetlen c mz esu^ t abl azatok - Sapientia EMTEkasa/adat12.pdfHas t ot abl azatok has t ot abl azatok angolul:hash tables, has t as:hashing Ha nagy mennyis egu} adatb ol gyakorlatilag

hasıtotablazatok – pelda

#include<stdio.h>

int m,T[50];

int beszur(int k){

int j,i=0;

do {j=(k+i) % m;

if (T[j]==-1){

T[j]=k;

return 0;

}

else i++;

} while (i!=m);

printf( "tulcsodulas");

};

int keres(int k){

int j,i=0;

do {j=(k+i) % m;

if (T[j]==k)

return j;

else i++;

}while ((T[j]!=-1) && (i!=m));

return -1;

};

17

Page 18: K ozvetlen c mz esu^ t abl azatok - Sapientia EMTEkasa/adat12.pdfHas t ot abl azatok has t ot abl azatok angolul:hash tables, has t as:hashing Ha nagy mennyis egu} adatb ol gyakorlatilag

void main(){

int i;

m=13;

for (i=0;i<m;i++){

T[i]=-1;

};

beszur(20); beszur(30); beszur(33);

beszur(17); beszur(19);

for (i=0;i<m;i++){

printf("%d ", T[i]);

};

printf("\nKereses \n%d %d %d %d %d %d\n",

keres(30), keres(17), keres(19), keres(20),

keres(33), keres(67));

};

Eredmeny:−1,−1,−1,−1, 30, 17, 19, 29, 33,−1,−1,−1,−14, 5, 6, 7, 8,−1

18