Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
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. 23:06
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. 23:06
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. 23:06
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 kulcsok 23:06
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ű. 23:06
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ű.) 23:06
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. 23:06
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: A nyílt címzés módszere Láncolással történő nyílt címzés módszere Független túlcsordulási lista alkalmazása 23:06
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. 23:06
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. 23:06
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). 23:06
12
A nyílt címzés módszere
Nyí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. 23:06
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. 23:06
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. 23:06
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. 23:06
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. 23:06
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ó. 23:06
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. 23:06
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. 23:06
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. 23:06
21
Lista műveletei Műveletei: (alap lista műveletek).
Hozzáférés (elérés): Minden elem a többitől függetlenül, közvetlenül elérhető. Q[i]=xi. 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. 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. Összefűzés (konkatenáció, egyesítés): R=[y1,y2, … ,ym] Q&R=[x1,x2, … ,xn, y1,y2, … ,ym] 23:06
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]. 23:06
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. 23:06
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. 23:06
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. 23:06
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. ACCES HEAD: Q[1] PUSH: Q[x] &Q POP: Q[1] és QQ[2..n] ACCESS END: Q[n] INJECT: QQ &[x] EJECT: Q[n] és QQ[1..n-1] 23:06
27
Speciális Listák Verem:
Egy speciális lista adatszerkezet. Az előbbi műveletek közül az ACCES HEAD PUSH 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. 23:06
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. 23:06
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. 23:06
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. 23:06
31
23:06
32
23:06
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 23:06
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 23:06
35
Speciális Listák: Sor Ábrázolás Szétszórt: Folytonos:
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 23:06
36
Speciális Listák: Sor Folytonos ábrázolás tipikus formái:
Fix kezdetű sor Vándorló sor Ciklikus sor Speciális sorok: Két végű sor Prioritásos sor 23:06
37
Speciális Listák: Sor Fix 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. 23:06
38
Speciális Listák: Sor Vá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. 23:06
39
Speciális Listák: Sor Ciklikus 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.) 23:06
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.