39
1 Kulcstranszformációs táblázat Ennek a táblázatnak az ábrázolása folytonos. Soros táblázat esetén egy elem helyét a beszúrás időpontja, önátrendező táblázatnál a feldolgozás gyakorisága, rendezett táblázatnál a kulcs értéke szabja meg. Kulcstranszformációs táblázat esetén egy elem helyét a k kulcs valamilyen f(k)-val jelölt függvénye alapján határozhatjuk meg. Ezt a függvényt hívjuk hasító vagy hash függvénynek. Az eljárást magát (elem kulcsához meghatározzuk az f(k) értéket) hashingnak vagy randomizálásnak vagy kulcstranszformációnak vagy hasításnak nevezzük. 1:02

Kulcstranszformációs táblázat

  • Upload
    aradia

  • View
    61

  • Download
    8

Embed Size (px)

DESCRIPTION

Kulcstranszformációs táblázat. Ennek a táblázatnak az ábrázolása folytonos. Soros táblázat esetén egy elem helyét a beszúrás időpontja, önátrendező táblázat nál a feldolgozás gyakorisága, rendezett táblázat nál a kulcs értéke szabja meg. - PowerPoint PPT Presentation

Citation preview

Page 1: Kulcstranszformációs táblázat

1

Kulcstranszformációs táblázat Ennek a táblázatnak az ábrázolása folytonos. Soros táblázat esetén egy elem helyét a beszúrás időpontja, önátrendező táblázatnál a feldolgozás gyakorisága, rendezett táblázatnál a kulcs értéke szabja meg. Kulcstranszformációs táblázat esetén egy elem helyét a k

kulcs valamilyen f(k)-val jelölt függvénye alapján határozhatjuk meg.

Ezt a függvényt hívjuk hasító vagy hash függvénynek. Az eljárást magát (elem kulcsához meghatározzuk az f(k)

értéket) hashingnak vagy randomizálásnak vagy kulcstranszformációnak vagy hasításnak nevezzük.

13:20

Page 2: Kulcstranszformációs táblázat

2

Kulcs transzformációs táblázat

A hash-függvény a kulcsokat képezi le tárbeli címekre. Kulcstranszformáció esetén beszélünk a kulcsok elvi előfordulási

lehetőségeiről, és a gyakorlatban ténylegesen megvalósuló kulcsértékekről.

A hash-függvény lehet kölcsönösen egyértelmű (ideális eset). Ez akkor valósítható meg, ha az elvi és a gyakorlati lehetőségek

száma közel megegyezik, vagy a gyakorlatban előforduló kulcsok egyenletesen oszlanak el az elvi lehetőségen belül. (Ideális eset, csak ritkán fordul elő)

Ha az elvi és a gyakorlati lehetőségek között nagy a különbség és nem egyenletes az eloszlás, akkor csak egyértelmű hash függvények léteznek.

13:20

Page 3: Kulcstranszformációs táblázat

3

Kulcs transzformációs táblázat

Egy-egy hash-függvénytől a következő dolgokat várjuk el: helyezze le a kulcsokat a rendelkezésre álló címtartományra; ezen a címtartományon próbálja meg egyenletessé tenni az eloszlást

Általában elmondhatjuk, hogy univerzális hash-függvény, ami ezeket garantája, nincs.

A legtöbb esetben előfordul, hogy különböző kulcsokhoz ugyanazt a címet rendeli. Ekkor szinonimákról beszélünk.

A szinonimák felbukkanását valahogy kezelni kell, mert egy helyen a tartományban csak egy elemet tudok elhelyezni.

13:20

Page 4: Kulcstranszformációs táblázat

4

Kulcstranszformációs módszerek

A kulcstranszformációs módszerek azt mondják meg, hogy a hash-függvény milyen algoritmussal helyezi le a kulcsot a tartománybeli címre.

Különböző módszerek a kulcsok egyes típusaira: Szöveges kulcsok:

a hash-függvények veszik a kulcsot alkotó karakterlánc belső kódját,

az így kapott numerikus értékeken pedig valamilyen transzformációt hajtanak végre.

Numerikus kulcsok13:20

Page 5: Kulcstranszformációs táblázat

5

Numerikus kulcsok Feltételezzük, hogy a kulcstranszformációs táblázat kulcsainak száma

legnagyobb várható száma „n”. (Ennyi elemnek foglalunk helyet.) Ennél általában nagyságrendekkel (100x, 1000x, …) nagyobb az elméletben

előfordulható kulcsok száma. Prímszámmal való osztás módszere:

A HASH függvény minden új KULCS értéket eloszt azon p prímszámmal, amely a legnagyobb, az n-nél kisebb prímek között.

Az elem helyét (sorszámot) a maradék fogja adni. Ebben az esetben 0 és p-1 közötti egész szám lesz. (Ha a tárhelyeket 1-től sorszámozzuk, ezt az értéket még 1-el megnöveljük)

Ez a módszer elég jól véletlenszerűsít (egyenletesít) és egyszerű.

13:20

Page 6: Kulcstranszformációs táblázat

6

Numerikus kulcsok Szorzás módszere:

Többféleképpen is megvalósítható. Az eredeti kulcsot minden esetben szoroznunk kell. Elképzelhető, hogy

egy prímszámmal, vagy önmagával, vagy a kulcsot valamely két számjegye között félbevágjuk, és a két felét

összeszorozzuk.

A megkapott szorzatnak vesszük annyi számjegyét (k), ahány jegyű n (a tárhelyek száma), és az ebből képzett számot tekintjük az elem táblázatbeli sorszámának. Általában a szorzat középső k db számjegye szokott lenni a Hash-függvény értéke.

Ez a módszer is elég jól véletlenszerűsít.

(Viszont nem annyira egyszerű.) 13:20

Page 7: Kulcstranszformációs táblázat

7

Numerikus kulcsok Helyiérték kiválasztásos módszer:

A kapott numerikus kulcs számjegyei közül véletlenszerűen kiválasztunk k db helyiértéket, és minden kulcsból az ezen a helyiértékeken szereplő mennyiségeket kiválasztva kapjuk az elem sorszámát.

Bázistranszformáció módszere: Ebben az esetben a kapott kulcsot úgy tekintjük, mint egy tizesnél

magasabb alapú számrendszerben felírt számot. Ezt a számot áttranszformáljuk (visszatranszformáljuk) tizes számrendszerbeli számmá, és az így kapott számnak k db számjegyéből képzett számot tekintjük az elem sorszámaként.

13:20

Page 8: Kulcstranszformációs táblázat

8

Kulcstranszformációs módszerek Ha sikerült Hash-függvényt választanunk, akkor a táblázat

létrehozásakor, ill. bővítése idején felmerülhet a következő probléma: A Hash-függvény időnként több érkező elemhez, ugyanazt a tárcímet

(sorszámot) rendeli hozzá. Ekkor szinonimák előfordulásáról, ill. túlcsordulásról beszélünk. Mit tegyünk ilyenkor?

Három módszer van a szinonima kezelésre: 1. A nyílt címzés módszere

2. Láncolással történő nyílt címzés módszere

3. Független túlcsordulási lista alkalmazása

13:20

Page 9: Kulcstranszformációs táblázat

9

A nyílt címzés módszere

A nem túlcsordult és a túlcsordult elemeket ugyanazon tárhely sorozatban kell elhelyezni.(Folytonos tárolás)

Ha valahol túlcsordulást tapasztalunk, akkor az adott helyről elindulunk a tárhelyek vége felé, és keressük az első üres tárhelyet, ahová bepakoljuk a túlcsordult elemet. Amennyiben elérjük a tár végét akkor az üres hely

keresését az 1. tárhelytől kezdve folytatjuk tovább.13:20

Page 10: Kulcstranszformációs táblázat

10

A nyílt címzés módszere

Egy adatelemet kulcs alapján visszakeresni ezután a Hash-függvény segítségével úgy lehet, hogy ha az adott kulcsú elem nincs a Hash-függvény által adott címen (tárhelyen), akkor egy teljes keresést kell végrehajtani az 1. üres helyig, vagy amíg meg nem találjuk a keresett elemet. Ha a keresés közben elérjük a tartomány végét (utolsó

tárhelyét), akkor a keresést a tárhely elején folytatjuk tovább. A keresést megállíthatja még az is, hogy anélkül érünk

vissza a kiinduló helyzethez, hogy a keresett elemet megtaláltuk volna.

13:20

Page 11: Kulcstranszformációs táblázat

11

A nyílt címzés módszere

A kulcstranszformációs táblázatnál nyílt címzés módszerével problémát jelenthet, hogy egy túlcsorduló rekord túlcsordulttá tehet egyébként nem túlcsorduló elemeket is.

A probléma megoldása az lehet, ha az elemeket két lépesben helyezzük el a táblázatban. Első körben azokat, amelyek szabályosan a helyükre

pakolhatók, majd ezek után a kimaradókat (ezek mindegyike

túlcsordult lesz majd).

13:20

Page 12: Kulcstranszformációs táblázat

12

A nyílt címzés módszereNyílt címzés esetén egy elem a tárhelyről fizikailag

semmiképpen sem törölhető, ugyanis a helyén maradó üres tárhely megállítaná a keresést. Emiatt az ilyen kulcstranszformációs táblázatban egy tárhelynek három állapota lehet attól függően, hogy érvényes elemet, vagy (logikailag) törölt elemet tartalmaz, vagy egyszerűen üres.

Új elem beszúrásakor az új elemet üres vagy legalább törölt helyre szúrjuk be.

13:20

Page 13: Kulcstranszformációs táblázat

13

Láncolással történő nyílt címzés módszere

A nyílt címzéssel történő szinonima kezelés hátránya: túlcsordult elemek esetén az elem elsődleges helyén (ahová a Hash-függvény leképezné) nincs semmi információ az elem tényleges helyére vonatkozóan.

Ezt javítja egy másik szinonimakezelési technika, a láncolással történő nyílt címzés módszere.

A tárhely eddigi két oszlopa (kulcs és adat) mellé fel kell venni egy harmadikat. A mutató oszlopban található értékek megadják az adott helyről, vele azonos hash-értékű kulccsal először túlcsorduló elem címét (sorszámát). Ezen értékek segítségével a szinonim elemeket egy-egy láncban fűzzük fel. Amennyiben a mutató mezőben található érték NIL vagy nulla értékű, akkor az adott tárhelyről (ugyanazon hash-értékű kulccsal) nem történt túlcsordulás – vagy már törölve lett a túlcsorduló elem.

13:20

Page 14: Kulcstranszformációs táblázat

14

Láncolással történő nyílt címzés módszere

A szinonimák a láncon keresztül gyorsan elérhetők, viszont nő a tárfoglalási és a karbantartási idő.

Nyílt címzés, illetve láncolással történő nyílt címzés módszere esetén az „várható”, hogy a túlcsordult elemek a túlcsordulás helyéhez viszonylag közel legyenek,

az elemek tárolásához a ténylegesen szükséges tárhelynél kb. 10%-kal több tárhelyet szokás lefoglalni. Ez tovább növeli a módszerek tárhely igényét.

13:20

Page 15: Kulcstranszformációs táblázat

15

Független túlcsordulási lista alkalmazása

Ennél a módszernél az azonos helyről túlcsordult rekordokat külön listákban, és nem a „folytonos tárban” helyezzük el.

Ezúttal a mutató oszlopban található értékek egyirányban láncolt listák fejmutatóiként funkcionálnak. (Amúgy hasonlít az előzőre.)

Az így elkészített táblázatba a nem túlcsorduló elemek kerülnek,

a szinonim elemek pedig a Hash-függvény által jelzett helyről kiinduló egy irányban láncolt listába kerülnek.

13:20

Page 16: Kulcstranszformációs táblázat

16

Kulcstranszformációs táblázatokon végzehető műveletek

Asszociatív adatszerkezet, mert ilyen táblázatnál az asszociatív csoportosítást a szinonimák adják.

Szinonimák létezése esetén ezek a csoportok nem 1 elemű részhalmazokat fognak alkotni.

Létrehozás: Szinonima kezelési technika választása, Hash-függvény választás (szempontjai már voltak). A gyakorlatban előforduló kulcsok számára adni kell valamilyen

becslést, majd tárhelyet kell foglalni a leendő elemek számára (1., 2.:

+10% ; 3: annyi, amennyi), és végül az elemek elhelyezése a tárban.

13:20

Page 17: Kulcstranszformációs táblázat

17

Kulcstranszformációs táblázatokon végzehető műveletek

Bővítés: Kulcsok alapján a Hash-függvény segétségével, és az

előzőekben említettek figyelembe vételével történik. Törlés:

Logikai törlés: Minden módszer esetén működik. Fizikai törlés: A harmadik módszernél a független túlcsrdulási

listákban elhelyezett elemek esetében lehetséges. Csere:

Kulcs alapján megoldható. Értékeit lehet cserélni bármikor. A kulcs cseréje törléssel és bővítéssel megoldható.

13:20

Page 18: Kulcstranszformációs táblázat

18

Kulcstranszformációs táblázatokon végzehető műveletek

Rendezés: Nincs (nem értelmezett) Elérés:

Kvázi közvetlen, hiszen a Hash-függvény a közvetlen elérést szolgálja. A szinonimákat viszont keresni kell.

Keresés: A szinonimakezelési módszertől függ.

Feldolgozás: Alapja a Hash-függvény, illetve rajta keresztül a „kvázi közvetlen” elérés.

A táblázat, mint adatszerkezet nagyon sok különböző jellegű problémánál előkerül. Sok operációs rendszer adatbázis kezelő rendszere használ különböző célokra táblázatokat. Igazi jelentőségük az állományok kezelésénél van.

13:20

Page 19: Kulcstranszformációs táblázat

19

Lista adatszerkezet

Szekvenciális adatszerkezetek Minden elem két másik elemmel van kapcsolatban, kivéve az első

és az utolsó elemet. Lista, mint absztrakt adatszerkezet.

Dinamikus adatszerkezet Van első és utolsó eleme - kivéve az üres listát. Minden elemnek van rákövetkezője - kivéve az utolsó elemet. És minden elemnek van megelőzője - kivéve az első elemet. Lista jelölése:

Q=[x1,x2, … ,xn] ahol az x-szel jelölt dolgok a lista elemei.

13:20

Page 20: Kulcstranszformációs táblázat

20

Lista adatszerkezet Az üres listának egy eleme sincs: [ ]. A lista első elemét szokás a lista fejének is nevezni. Azt a listát amelyik úgy keletkezik, hogy az eredeti listából

elhagyjuk a fejet (első elemet), a lista farkának hívjuk. Fej: [x1]

Farok: [x2, … ,xn]

Vége: [xn] A lista mérete alatt az elemeinek a számát értjük. Méret jelölése: |Q| (=n). Ezek speciális lista fogalmak voltak.

13:20

Page 21: Kulcstranszformációs táblázat

21

Lista műveleteiMűveletei: (alap lista műveletek).

1. Hozzáférés (elérés): Minden elem a többitől függetlenül, közvetlenül elérhető. Q[i]=x i. Az elemek elérése sorszámhivatkozással történik. Ha nem létező sorszámra hivatkozunk, akkor a hozzáférés az üres listát adja.

2. Allista képzés: Q[i..j]=[xi,xi+1, … ,xj-1,xj] Az eredeti listának két megadott sorszámú eleme közötti részlistát adja

eredményül. Ha az i sorszám értéke<1, akkor az allistaképzés az első elemtől indul, ha a j

értéke >n, akkor az n-edik elmig tart.

3. Összefűzés (konkatenáció, egyesítés): R=[y1,y2, … ,ym] Q&R=[x1,x2, … ,xn, y1,y2, … ,ym]

13:20

Page 22: Kulcstranszformációs táblázat

22

Lista, mint absztrakt adatszerkezet műveletei

Ezek a speciális lista műveletek fontosak, mert az összes többi műveletetet ennek a háromnak a segítségével lehet definiálni:

Létrehozás: Létrehozákor explicit módon megadjuk a lista elemeit, amelyek a

felsorolás sorrendje alapján kapják sorszámaikat. Bővítés:

A listát bárhol bővíthetjük. A bővítést részlista képzéssel és konkatenációval realizálhatjuk. Ha a listát a k-adik elem után akarom bővíteni egy új elemmel, azt

úgy tehetem meg: Q[1..k]&[elem] &Q[k+1..n].

13:20

Page 23: Kulcstranszformációs táblázat

23

Lista, mint absztrakt adatszerkezet műveletei

Törlés: Fizikai törlést jelent. K-adik elem törlése: Két allista

képzéssel és az eredményük konkatenálásával tehetjük meg: Q[1..k-1]&Q[k+1..n]

Csere: Értelmezett: Allista képzésekkel és konkatenációval realizálható k-adik

elem cseréje: Q[1..k-1]&[x] &Q[k+1..n]

A két részlista közé beillesztjük az új elemet, majd a részeket összefüzzük.

13:20

Page 24: Kulcstranszformációs táblázat

24

Lista, mint absztrakt adatszerkezet műveletei

Rendezés: Minden értelmezett, akármelyik használható.

Keresés: Teljes keresés, ill. rendezett listánál lineáris vagy bináris

(ez ábrázolás függő is). Feldolgozás:

Lista elemeit dolgozza fel. A speciális lista műveletekkel.

13:20

Page 25: Kulcstranszformációs táblázat

25

Lista ábrázolása

Ábrázolás: Mindkét módszerrel (folytonos, szétszórt) szokásos.

Szétszórt ábrázolási módok közül a két irányban láncolt lista a legpraktikusabb.

A lista alapvető szerepe olyan problémáknál, ahol az elemek között valamilyen nem értékeken, hanem például időbeliségen alapuló sorrend van, illetve ahol az elemek elérését mindig közvetlenül szeretnénk megoldani.

13:20

Page 26: Kulcstranszformációs táblázat

26

Speciális Listák

Ezeknél többnyire csak az alábbi hat speciális művelet némelyike használatos.

Ezek a lista első és utolsó elemének kezelésére szolgálnak.

1. ACCES HEAD: Q[1]2. PUSH: Q[x] &Q

3. POP: Q[1] és QQ[2..n]4. ACCESS END: Q[n]

5. INJECT: QQ &[x]

6. EJECT: Q[n] és QQ[1..n-1]

13:20

Page 27: Kulcstranszformációs táblázat

27

Speciális Listák Verem:

Egy speciális lista adatszerkezet. Az előbbi műveletek közül az

1. ACCES HEAD 2. PUSH3. POP

műveleteket lehet értelmezni rajta. A verem alján van a legkisebb sorszámú elem,

feljebb egyre nagyobb sorszámúak. A vermet LIFO (last in first out) adatszerkezetnek is szokás nevezni.

Az utolsónak érkezett fog először távozni.

13:20

Page 28: Kulcstranszformációs táblázat

28

Speciális Listák: Verem Létrehozáskor mindig az üres vermet hozzuk létre. Bővítés: A Push művelet alkalmazásával. Az elemeket érkezésük sorrendjében egymás felé pakoljuk a

veremben. Feldolgozáskor csak a legfelső elem hozzáférhető

ACCESSHEAD POP (Egyben fizikai törlés is)

Törlés: csak fizikai, csak a legutolsó elemet lehet. Rendezés: nem értelmezett; Keresés: nem értelmezett; Elérés: Csak a legutoljára elhelyezett elemet lehet.

13:20

Page 29: Kulcstranszformációs táblázat

29

Speciális Listák: VeremÁbrázolás: Mindkét módon

Folytonos reprezentáció esetén van egy verem mutató, amely jelzi, hogy aktuálisan hány elem van a

veremben. Egyúttal ez a verem mutató a verem tetejét is címzi. A verem üres, ha nincs egy eleme sem, a verem mutató értéke ilyenkor

nulla. A verem tele van, ha nincs több hely a veremben, veremmutató értéke,

vm=n. PUSH: Ha a veremben még van hely, az új elemet az vm+1-edik helyre

tesszük, majd a veremmutató értéke egyel növeljük. POP: Ha a verem nem üres, a veremmutató által mutatott helyről

vesszük ki az elemet, majd a verem mutató értékét eggyel csökkentjük.

13:20

Page 30: Kulcstranszformációs táblázat

30

Speciális Listák: Verem

Szétszórt reprezentáció Egy irányban láncolt listát használhatunk. PUSH: Egy irányban láncolt lista első eleme előtti bővítéssel Ha a verem üres, a fejmutató értéke NIL. A verem implementációjakor ezeket el kell rejteni, de azért tudnunk

kell, hogy üres-e a verem, vagy esetleg tele van-e.

A verem alapvető fontosságú az olyan problémák kezelésénél, ahol az elemeket felbukkanási sorrendjük fordítottjában kell feldolgozni.

A tömb mellett a másik legalapvetőbb adatszerkezet.

Programozási nyelveknél az alprogram hívási láncok kezelésénél van alapvető szerepe.

13:20

Page 31: Kulcstranszformációs táblázat

13:20 31

Page 32: Kulcstranszformációs táblázat

13:20 32

Page 33: Kulcstranszformációs táblázat

33

Speciális Listák: Sor A sor adatszerkezet olyan speciális lista, amelyet a

műveletei definiálnak. 1. ACCESS HEAD 3. POP itt GET-nek nevezzük 5. INJECT itt PUT-nak nevezzük

Kiegészítésként kiemeljük az első és az utolsó elemet FIFO adatszerkezetnek is nevezik (First In First Out) Ennek megfelelően a sorba az elemek az érkezésnek megfelelő

sorrendben kerülnek, az újak mindig a sor végére kerülnek Feldolgozni a sor első elemét szokás, ami egyben fizikai törlést is

jelent

13:20

Page 34: Kulcstranszformációs táblázat

34

Speciális Listák: Sor Sorba történő írás művelete, PUT művelet, az olvasás (fizikai törlés) művelete a GET művelet. Logikai törlés nincs Rendezés nincs értelmezve Keresés nincs értelmezve Elérés: Csak az első elemet tudjuk elérni Feldolgozás a fejmutató által hivatkozott elemet Bővítés: az utolsó mutató után a mutatók átállításával

13:20

Page 35: Kulcstranszformációs táblázat

35

Speciális Listák: Sor

Ábrázolás Szétszórt:

egyirányban láncolt listával, két segédmutatóval (fej és vége mutató)

Folytonos: Folytonos reprezentációk mindegyike egy

vektorban tárolja a sor elemeit Fontos a sor elejének és végének jelzése

13:20

Page 36: Kulcstranszformációs táblázat

36

Speciális Listák: Sor

Folytonos ábrázolás tipikus formái:1. Fix kezdetű sor

2. Vándorló sor

3. Ciklikus sor

Speciális sorok:1. Két végű sor

2. Prioritásos sor

13:20

Page 37: Kulcstranszformációs táblázat

37

Speciális Listák: SorFix kezdetű sor

A sor első eleme a vektor első tárhelyén helyezkedik el, az utolsó elem mutatója v.

Üres a sor: v=0 Tele van a sor: v=n Új elem beírása: v+1-edik helyre kerül, majd v eggyel

megnő. Elem törlése: Nehézkes, több adatmozgatás, a sor első

elemét dolgozzuk fel. A sor eleje pedig mindig ugyanott kell, hogy legyen, ezért törlés után a többi elemet rámozgatjuk az előző pozícióra. V értéke eggyel csökken.

13:20

Page 38: Kulcstranszformációs táblázat

38

Speciális Listák: SorVándorló sor

A sokszori adatmozgatást küszöböli ki Elvetjük azt a megszorítást, hogy az első elem az első helyen álljon.

Megengedjük, hogy az első elem helye vándoroljon. Ehhez segédmutatók, e és a szokásos v szükséges Üres a sor: e=v=0 Tele a sor: e=1, v=n Új elem bekerülése: A v mutatót követő pozícióra kerül be, ha a sor

nincsen tele. Bővítéskorkor előfordulhat, hogy a v az utolsón áll, de az e

vándorlása miatt a sor nincs tele: ilyenkor (csak ilyenkor), adatmozgatást hajtunk végre: A legelső pozícióig toljuk a sort előre.

13:20

Page 39: Kulcstranszformációs táblázat

39

Speciális Listák: SorCiklikus sor:

Az adatmozgatást eddig még nem küszöböltük ki teljesen. A ciklikus sorban az elejét és végét jelző mutató vándorlását a határokon keresztül is megengedjük: Üres a sor: e=v=0 Tele a sor: e=1 és v=n, vagy v+1=e. Új elem: szabályokat figyelembe véve, ha a sor nincs tele,

akkor a v+1-edik helyre kerül, (esetleg v visszaugrik az elejére).

Törlés: e mutató által mutatott elem, majd e=e+1. (Esetleg e visszaugrik az elejére.)

13:20