Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

1 Hash-elés. 2 Mi a hash-elés? Gyorsan teszi lehetővé a keresést, törlést, beszúrást, módosítást Nem szükséges az elemek rendezettsége Nincsenek rendezéshez.

Hasonló előadás


Az előadások a következő témára: "1 Hash-elés. 2 Mi a hash-elés? Gyorsan teszi lehetővé a keresést, törlést, beszúrást, módosítást Nem szükséges az elemek rendezettsége Nincsenek rendezéshez."— Előadás másolata:

1 1 Hash-elés

2 2 Mi a hash-elés? Gyorsan teszi lehetővé a keresést, törlést, beszúrást, módosítást Nem szükséges az elemek rendezettsége Nincsenek rendezéshez kapcsolódó elérési igények Cél: egy kulcshalmazzal azonosított állomány megszervezése úgy, hogy a fenti műveletek hatékonyak legyenek. Olyan helyeken használatos, ahol az átlagosan jó teljesítmény az igazán fontos, nem jelent gondot a ritkán előforduló hosszabb válaszidő

3 3 Példa Tegyük fel, hogy embereket szeretnénk sorrendbe rendezni. Azonosíthatók személyi számmal, amiből 1 jegy redundáns, illetve figyelembe véve a korlátozásokat: 2*10 2 *12*31*10 3 ≈74 millió, de nekünk csak 10 millió kulcsra van szükségünk. Legyünk optimisták: 11 millió rekord számára foglaljunk helyet Ekkor keressünk olyan h függvényt, ami a I = [0, 11*10 6 -1] intervallumban lévő egészek az érték készlete, értelmezési tartománya pedig a kulcsok halmaza, azaz a személyi számok Jó volna, ha K≠K', ez azonban lehetetlen, mert a kulcsok halmaza jóval nagyobb, mint a logikai címek halmaza

4 4 Alapvető kérdések Kulcsütközés Először a K kulcsú elemet a h(K) címre tesszük Majd következik egy K' kulcsú elem, mely a h(K') címre kerülne, de h(K)=h(K'), vagyis kulcsütközés keletkezik Ezt az ütközést fel kell oldanunk. Megfelelő hash függvény találása Legyen könnyen kiszámítható Adott kulcshalmazon minél kevesebb ütközést okozzon

5 5 Vödrös hash-elés vagy láncolás (1) Van egy V[0;M-1] vödörkatalógusunk, amely egy h értékkészletének elemivel indexelt tömb, V elemei pedig mutatók V[i] vödörbe kerülnek azok az elemek, amelyre h(K)=i teljesül Tehát tegyük fel, hogy a K kulcsú rekordot szeretnénk beilleszteni. Ekkor kiszámítjuk a h(K)-t, majd a V[h(K)] bejegyzését tekintjük. Ez egy mutató arra a vödörre, melyben a h(K) kulcsú elemeket szeretnénk tárolni. Ebben elhelyezzük az elemet.

6 6 Vödrös hash-elés vagy láncolás (2) 0 M-1 Kh(K)

7 7 Vödrös hash-elés vagy láncolás (3) Vödörben való elhelyezés több módon is történhet Gyakori az első szabad helyre tevés Másik szokásos eljárás a kulcs szerint rendezés a vödörben A keresés ezek után egyértelmű K kulcsú elemet ezek után úgy keressük, hogy először kiszámítjuk a h(K)-t majd a V[h(k)]-hoz tartozó vödröt, ezek után a vödör lapjain lépkedve megkeressük az elemet. Ezek után a törlés és módosítás triviális Megj: ha a módosítás a kulcsot is érinti, akkor törlés és újboli beillesztés szükséges lehet.

8 8 Vödrös hash-elés vagy láncolás (4) A módszer költsége: Az időigényt a lapláncok hossza határozza meg Tegyük fel, hogy M vödör l lapnyi rekordot tárolunk Ekkor egy vödörbe kb. l/m lapnyi rekord kerül (Átlagos lánchossz) Átlagos keresés: 1+l/M, ha V[h(k)] beolvasása egy lapelérés és átlagosan szóródtak el a lapok. A módszer alkalmazása előtt fontos meghatározni M-et. Úgy kell meghatároznunk, hogy l/M közel legyen 1-hez. (l általáben ismert.) Pl 1000000 rekord esetén, tegyük fel, hogy egy lapok 5 rekord fér el. Ekkor l=1 000 000/5=200 000 vagyis M-t 220- 240 ezer körülinek érdemes választani.

9 9 Nyitott címzés (1) A rekordokat egy T[0;M-1] tömbben tároljuk, h értékkészlete [0;M-1] K kulcsú rekord helye T[h(k)], ha nem foglalt Ha foglalt új helyet keresünk a rekordnak A nyitott címzésű elemek a 0 … M-1 elemek egy h 1 (K)… h M-1 (K) permutációját használják, vagyis végigpróbáljuk a h(K)+h i (K) (mod M) elemeket az első üres helyig, ahol az elemet elhelyezzük

10 10 Nyitott címzés (2) h(K)h 1 (K)h 2 (K)M-10 K K

11 11 Nyitott címzés (3) Hatékonyságelemzéshez használt jelölések: – N : táblában lévő rekordok száma – M : tábla celláinak száma – α=N/M : telitettségi tényező – C N : Sikeres keresések során az átlagos cellavizsgálatok – C' N : Sikertelen keresések során az átlagos cellavizsgálatok

12 12 Nyitott címzés (4) Lineáris próbálás: – h i (k) = -i – Addig lépkedünk balra, amíg üres cellát nem találunk – C N =1/2*(1+1/(1-α)) – C' N =1/2*(1+(1/(1-α)) 2 )

13 13 Nyitott címzés (5) – 80%os telítettség esetén is már nagy a sikertelen keresések száma

14 14 Nyitott címzés (6) – Kereséshez szükséges bevezetni egy TÖRÖLT elemet, ami egy elemnek tekintendő keresés esetén – Magyarázat: Tegyük fel hogy egy 7 elemű tömbbe beszúrjuk a 11, 3, 9 elemeket, ezzel lefoglalva a T[4] T[3] T[2] cellákat. Ezek után beszúrjuk a 4-t a T[1]-be, mivel a T[4] T[3] T[2] cellák foglaltak. Ha ezek után töröljük a T[4]-ből a 11-t, úgy hogy oda NULL-t írunk, akkor a keresésnél azt hihetjük, hogy T[4]-ben még nem szerepelt semmi, ezért azt hihetjük hogy 4 még nem volt.

15 15 Nyitott címzés (7) – Lineáris próbálás hátrány a csomósodás, ezzel növelve a keresési és beillesztési időt (Elsődleges csomósodás) Álvéletlen próbálás – Cél: elkerülni az elsődleges csomósodást minél kisebb műveletigénnyel (h(K) legyen egyszerűen kiszámítható) – Ha h(K)=h(L), akkor K és L teljes próbasorozata megegyezik. Sok ilyen elem esetén a próbasorozatok mentén alakul ki a csomósodás (Másodlagos csomósodás)

16 16 Nyitott címzés (8) – Példa: kvadrikus maradék Legyen M= 4k+3, ahol k prím. Ekkor a próbasorozat legyen: 0, 1 2, -(1) 2, … ((M-1)/2) 2, -((M-1)/2) 2

17 17 Nyitott címzés (9) – Keresés költsége: C N ≈1-log(1-α)-α/2 C' N ≈1/(1-α)-α-log(1-α) Kettős hash-elés – h mellett egy h'-t is használunk – h'(K) értékek relatív prímek M értékéhez – K próbasorozata ekkor: h i (k)=-i*h'(K) 0, -1*h'(K), … -(M-1)h'(K) mind különböző (mod M) – Sajátosság: h(K)=h(K')-re nagy eséllyel különböző a póbasorozat

18 18 Nyitott címzés (10) – C N ≈1/α*log(1/(1-α)) – C' N ≈1/(1-α) – Mindkét -féle csomósodást kiküszöböl

19 19 Hash-függvények Két követelmény: – Gyorsan számolható – Minél kevesebb ütközést okozzon Két módszer: – Osztómódszer – Szorzómódszer

20 20 Osztómódszer Legyen h(K)=K (mod M) Gyorsaság: egy maradékos osztás gyors Nem közömbös M a használatakor – lényeges feltétel, hogy prím legyen a kvadratikus maradékpróbánál – Ha M 2 hatvány, akkor h(K) csak a K utolsó pár bitjétől függ

21 21 Szorzómódszer (1) Szükséges a rögzített β (є R) paraméter h(K)=└ M* {β * K } ┘ – {β * K} a β * K tört része, így {β * K} є [0,1), majd felskálázzuk M címtartományába Speciális eset: – M=2 t ; w pedig a szókapacitás, A relatív prím w-hez és egész, ekkor legyen β=A/w.

22 22 Szorzómódszer (2) Jól használható számtani sorozatokon, amik adódhatnak pl számozott termékek vagy dokumentumokból. – Ekkor a h(K), h(K+d)... sorozat közelítőleg számtani sorozat lesz.

23 23 Kettős hash-elés h' függvényre van szükség, ami értékei a [0,M-1] intervallumba esnek és relatív prímek M-hez Ha M prím akkor h'(K)= K (mod M-1)+1 jó Mivel K (mod M-1) 0 és M-2 közé esik ezért jó, mert így a h' 1 és M-1 közé esik Ebből következik, hogy h'(K) és M relatív prímek, és sok különböző sorozatot ad.


Letölteni ppt "1 Hash-elés. 2 Mi a hash-elés? Gyorsan teszi lehetővé a keresést, törlést, beszúrást, módosítást Nem szükséges az elemek rendezettsége Nincsenek rendezéshez."

Hasonló előadás


Google Hirdetések