Adatszerkezetek I. 6. előadás

Hasonló dokumentumok
Algoritmusok és adatszerkezetek I. 5. előadás

Hasító táblázatok. Hasító függvények, kulcsütközés kezelése. Programozás II. előadás. Szénási Sándor

9. előadás. A táblázat. A táblázatról általában, soros, önátrendező, rendezett és kulcstranszformációs táblázat

Táblázatok fontosabb műveletei 1

Algoritmuselmélet. Hashelés. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Algoritmuselmélet. Hashelés. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Algoritmusok és adatszerkezetek 2.

Adatszerkezetek I. 7. előadás. (Horváth Gyula anyagai felhasználásával)

Adatszerkezetek 2. Dr. Iványi Péter

Algoritmuselmélet 6. előadás

Adatszerkezetek I. 8. előadás. (Horváth Gyula anyagai felhasználásával)

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Adatszerkezetek I. 4. előadás

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Algoritmusok és adatszerkezetek I. 3. előadás

Algoritmuselmélet. Hashelés. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Algoritmusok és adatszerkezetek I. 1. előadás

17. A 2-3 fák és B-fák. 2-3 fák

Programozás alapjai. 8. előadás

10. előadás Speciális többágú fák

Adatszerkezetek Hasító táblák. Dr. Iványi Péter

Adatszerkezetek 1. előadás

Algoritmusok és adatszerkezetek I. 4. előadás

Hatékonyság 1. előadás

Adatszerkezetek 1. Dr. Iványi Péter

file:///d:/okt/ad/jegyzet/ad1/b+fa.html

Egyirányban láncolt lista

Fájlszervezés. Adatbázisok tervezése, megvalósítása és menedzselése

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:

19. Hasításos technikák (hash-elés)

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Algoritmizálás és adatmodellezés tanítása 6. előadás

Adatbáziskezelés. Indexek, normalizálás NZS 1

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

Web-programozó Web-programozó

Kulcs transzformációs táblázat

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Adatszerkezetek I. 9. előadás

Adatszerkezetek II. 1. előadás

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Önszervező bináris keresőfák

Tuesday, March 6, 12. Hasító táblázatok

Adatszerkezetek I. 1. előadás

file:///d:/apa/okt/ad/jegyzet/ad1/b+fa.html

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék

Algoritmuselmélet. 2-3 fák. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 8.

Struktúra nélküli adatszerkezetek

Fák 3. előadás. (Horváth Gyula anyagai felhasználásával)

Informatika szigorlat 9-es tétel: Az adatbázis-kezelő rendszerek fogalmai

Algoritmuselmélet 2. előadás

Rendezések. Összehasonlító rendezések

HÁZI FELADAT PROGRAMOZÁS I. évf. Fizikus BSc. 2009/2010. I. félév

ELEMI PROGRAMOZÁSI TÉTELEK

Térinformatikai adatszerkezetek

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

Alapvető fizikai tárolási szerkezetek, indexek, B-fák

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

Algoritmusok és adatszerkezetek gyakorlat 07

Multihalmaz, intervallumhalmaz

Algoritmizálás, adatmodellezés 1. előadás

Halmaz típus Értékhalmaz:

Gyakorló feladatok az 1. nagy zárthelyire

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

B-fa. Felépítés, alapvető műveletek. Programozás II. előadás. Szénási Sándor.

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Programozási segédlet

Hierarchikus adatszerkezetek

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

Programozás alapjai II. (7. ea) C++

Láncolt listák. Egyszerű, rendezett és speciális láncolt listák. Programozás II. előadás. Szénási Sándor

Algoritmizálás és adatmodellezés 2. előadás

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Rekurzív algoritmusok

14. Mediánok és rendezett minták

Láncolt Listák. Adat1 Adat2 Adat3 ø. Adat1 Adat2 ø Adat3

7 7, ,22 13,22 13, ,28

Algoritmusok és adatszerkezetek I. 2. előadás

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Rekurzió. Dr. Iványi Péter

Algoritmizálás és adatmodellezés tanítása 9. előadás

ALAPOK. 0 és 255 közé eső számértékek tárolására. Számértékek, például távolságok, pontszámok, darabszámok.

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t

Algoritmusok és adatszerkezetek gyakorlat 03 Oszd meg és uralkodj. Nagy

adatszerkezetek 2007/7/6 15:51 page 27 #23

Tájékoztató. Használható segédeszköz: -

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Adatbázis alapú rendszerek

Algoritmusok és adatszerkezetek I. 2. előadás

Véletlenszám generátorok és tesztelésük. Tossenberger Tamás

Haladó rendezések. PPT 2007/2008 tavasz.

Algoritmizálás és adatmodellezés tanítása 1. előadás

Prímszámok statisztikai analízise

Programozási tételek. Dr. Iványi Péter

terminológia, értelmezések, fogalmak

Bevezetés a programozásba I.

Információs Technológia

Átírás:

Adatszerkezetek I. 6. előadás

Táblázat A táblázat olyan halmazféleség, amelyben az elemeket kulcsértékkel azonosítjuk. A szokásos halmazműveletekből azonban csak néhányat definiálunk rá: Üres: Táblázat Beilleszt(Táblázat,Elem): Táblázat {NemDef} Töröl(Táblázat,Kulcs): Táblázat {NemDef} Keres(Táblázat,Kulcs): Elem {NemDef} Ez tulajdonképpen sorozatnak is felfogható lenne, ha nem sorszámmal, hanem kulccsal indexelnénk de nincs következőre lépési lehetőség. 2013.10.22. 2

Táblázat Kitérő: Keresési idők különböző módszerekre Módszer Sorozatféle Speciális Hasonlítás-szám T L F s F d feltétel sikeres sikertelen Lineáris keresés I I I I N/2 N Lineáris kiválasztás I I I I a keresett N/2 Lineáris keresés I I I I gyakoriság szerint rendezve (N+2)/3 N Logaritmikus keresés I N N I rendezettség [log 2 (N)]-1 [log 2 (N)]+1 Fibonacci keresés I N N I rendezettség <[log 2 (N)]-1 >[log 2 (N)]+1 Interpolációs keresés I N N I rendezettség log 2 (log 2 (N)) log 2 (N) T=Tömb; L=Lista; F s =Szekvenciális file; F d =Direkt file 2013.10.22. 3

Táblázat Kérdés: Lehet olyan keresés, amelynek az ideje konstans? Válasz: Igen, ha tudjuk, hogy hol van a keresett elem! A probléma: honnan tudhatnánk? 2013.10.22. 4

A megvalósítás ötlete: Táblázat vegyünk egy tömböt a táblázat elemei tárolásához, a tömb elemei rekordok, amelynek egyik mezője a rekordot egyértelműen azonosító kulcs (de lehetne kulcsot kiszámító függvény is); kell egy ún. kulcstranszformációs függvény, ami a lehetséges kulcsértékeket leképezi a tömb indextartományára; ennek a függvénynek egyértelműnek kellene lennie (azaz különböző kulcsokhoz különböző indexet rendeljen)! 2013.10.22. 5

Táblázat Születésnap-paradoxon: ha 23 ember összegyűlik ünnepelni, akkor ~0,5073 annak az esélye, hogy lesz közöttük legalább kettő, aki azonos napon született. (Pl. az 1999-es informatika tanári évfolyam-létszámmal, a 103-mal: ~0,999 999 884,, azaz kémikusul mondva 6 kilences pontossággal biztos esemény!) 2013.10.22. 6

Táblázat Kulcstranszformációs (index-/hash-/hasító/tördelő) függvény: h: K I ahol K = kulcshalmaz (ahova képez a kulcsfüggvény, ami az egyes elemekhez hozzárendeli azt az információt - a kulcsot -, amely alapján kikereshető a táblázatból). I = indexhalmaz (amellyel a reprezentációbeli tömböt indexelni fogjuk). 2013.10.22. 7

Táblázat Az elvárások gyengítése a kulcstranszformációs függvénnyel szemben: legyen K a lehetséges kulcsok halmaza, értékkészlete a teljes I={0..M 1} halmaz, véletlenszerűen szórja szét (még a közel azonos) kulcsokat is (egyenletesség), kevés ütközést produkáljon, egyszerűen kiszámolható legyen! Lemondunk az egyértelműség mindenáron teljesítéséről. A nem egyértelműség következménye: a kulcsütközés! 2013.10.22. 8

Táblázat Kulcstranszformációs függvény variációk: a) Osztó módszer h(k):=k Mod M {h(k):=k Div M???} b) Szorzó módszer h(k):=közepe m (A*k) (a középső m számjegy) c) Számjegyes módszer h k n 1 i 0 Súly i Helyiérték i k mod M d) Jel-kód módszerek h hossz( k ) k Karakterkód k, i i 1 2013.10.22. 9

Táblázat A kulcsütközés megoldási módszerei: Túlcsordulási terület módszere Láncolt altáblák módszere Lineárisan szétszórt altáblák vagy nyílt címzés módszer Másodlagos kulccsal, más néven kettős hash-eléssel Hierarchikus módszer Blokkolt altáblák, láncolt blokkokkal Ezekből az első hármat fogjuk vizsgálni! 2013.10.22. 10

Táblázat A táblázat típus megvalósítási lehetőségei: Elemtípus=Rekord(kulcs: Kulcstípus, egyéb:???) Függvény Kulcs: Elemtípus Kulcstípus Függvény Hash: Kulcstípus 0..Méret-1 2013.10.22. 11

Táblázat típus: túlcsordulási terület módszere Konstans TúlcsMéret, Méret: Egész Típus TJellemző=(üres,foglalt,törölt) TElem=Rekord(elem: Elemtípus, attr:tjellemző) TTábla=Tömb(0..Méret-1:TElem) TTulcsTer=Tömb(0..TúlcsMéret-1:Elemtípus) Változó ft: TTábla, tt: TTulcsTer [ fő -, túlcsordulási tábla] db: Egész hiba: Logikai 2013.10.22. 12

Táblázat típus: túlcsordulási terület módszere A beillesztés elve: Ha a kiszámolt hely üres, betehető oda. Ha foglalt és nem ő van ott, akkor a túlcsordulási területre teendő: Ha a túlcsordulási területen nincs még, akkor a végére tehető. Ha már ott van, akkor az hiba! Ha foglalt és ő van ott, az hiba! 2013.10.22. 13

Táblázat típus: túlcsordulási terület módszere Beilleszt(t,e): kk:=hash(e.kulcs) Ha t.ft(kk).attr {üres,törölt} akkor t.ft(kk):=(e,foglalt) * különben ha t.ft(kk).elem.kulcs e.kulcs akkor Keresés(t.tt,e.kulcs,van,melyik) Ha van vagy t.db=tulcsméret-1 akkor t.hiba:=igaz különben t.tt(t.db):=e; t.db:=t.db+1 különben t.hiba:=igaz Eljárás vége. *: ellenőrizni lehetne, hogy a túlcsordulási területen van-e. 2013.10.22. 14

Táblázat típus: túlcsordulási terület módszere A törlés elve: Ha a kiszámolt hely üres, akkor a főtáblában és a túlcsordulási területen sem lehet, a törlés hibás. Ha foglalt és ő van ott, akkor törölhető. Ha törölt vagy nem ő van ott, akkor jön a túlcsordulási terület: Ha ott van, törölhető (az utolsó a helyére tehető). Ha nincs ott, akkor az hiba! 2013.10.22. 15

Táblázat típus: túlcsordulási terület módszere Töröl(t,k): kk:=hash(k) Ha t.ft(kk).attr üres akkor Ha t.ft(kk).attr=foglalt és t.ft(kk).elem.kulcs=k akkor t.ft(kk).attr:=törölt különben Keresés(t.tt,k,van,melyik) Ha van akkor t.db:=t.db-1 t.tt(melyik):=t.tt(t.db) különben t.hiba:=igaz különben t.hiba:=igaz Eljárás vége. 2013.10.22. 16

A keresés elve: Táblázat típus: túlcsordulási terület módszere Ha a kiszámolt hely üres, akkor a főtáblában és a túlcsordulási területen sem lehet, nem találtuk meg. Ha foglalt és ő van ott, akkor megtaláltuk. Ha törölt vagy nem ő van ott, akkor jön a túlcsordulási terület: Ha ott van, akkor megtaláltuk. Ha nincs ott, akkor nem találtuk meg. 2013.10.22. 17

Táblázat típus: túlcsordulási terület módszere Keres(t,k,van,e): kk:=hash(k) Ha t.ft(kk).attr=üres akkor van:=hamis különben ha t.ft(kk).attr=foglalt és t.ft(kk).elem.kulcs=k akkor van:=igaz; e:=t.ft(kk).elem különben Keresés(t.tt,k,van,melyik) Ha van akkor e:=t.tt(melyik) Eljárás vége. 2013.10.22. 18

Táblázat típus: láncolt altáblák módszere Konstans Méret: Egész Típus TTábla=Tömb(0..Méret-1: Lista(Elemtípus)) Változó tab: TTábla hiba: Logikai Üres(t): Ciklus i=0-tól Méret-1-ig Üres(t.tab(i)) Ciklus vége Eljárás vége. 2013.10.22. 19

A keresés elve: Táblázat típus: láncolt altáblák módszere Ha a kiszámolt hely üres, akkor a táblában nem lehet, nem találtuk meg. Ha nem üres, akkor megkeressük a listában. Ha ott van, akkor megtaláltuk. Ha nincs ott, akkor nem találtuk meg. 2013.10.22. 20

Táblázat típus: láncolt altáblák módszere Keres(t,k,van,e): kk:=hash(k); van:=hamis Ha nem üres?(t.tab(kk)) akkor Elsőre(t.tab(kk)) Ciklus amíg nem utolsó?(t.tab(kk)) és Érték(t.tab(kk)).kulcs k Következőre(t.tab(kk)) Ciklus vége Ha Érték(t.tab(kk)).kulcs=k akkor van:=igaz; e:=érték(t.tab(kk)) Eljárás vége. 2013.10.22. 21

A beillesztés elve: Táblázat típus: láncolt altáblák módszere Ha a kiszámolt hely egy lista, amibe az elemet be kell szúrni! Beilleszt(t,e): kk:=hash(e.kulcs) BeszúrElejére(t.tab(kk),e) Eljárás vége. Megjegyzés: ellenőrizni lehetne, hogy az új elem szerepel-e már az adott listában, mert akkor nem szúrjuk be még egyszer. 2013.10.22. 22

Táblázat típus: láncolt altáblák módszere A törlés elve: Ha a kiszámolt hely üres, akkor a táblában nem lehet, a törlés hibás. Ha nem üres, akkor meg kell keresni az adott listában Ha ott van, törölhető. Ha nincs ott, akkor az hiba! 2013.10.22. 23

Táblázat típus: láncolt altáblák módszere Töröl(t,k): kk:=hash(k) Ha üres?(t.tab(kk)) akkor t.hiba:=igaz különben Elsőre(t.tab(kk)) Ciklus amíg nem utolsó?(t.tab(kk)) és Érték(t.tab(kk)).kulcs k Következőre(t.tab(kk)) Ciklus vége Ha Érték(t.tab(kk)).kulcs=k akkor Kihagy(t.tab(kk)) különben t.hiba:=igaz Eljárás vége. 2013.10.22. 24

Táblázat típus: lineárisan szétszórt altáblák módszere Konstans Méret: Egész Típus TJellemző=(üres,foglalt,törölt) TElem=Rekord(elem: Elemtípus, attr:tjellemző) TTábla=Tömb(0..Méret-1:TElem) Változó tab: TTábla hiba: Logikai Megjegyzés: feltesszük, hogy van üres elem a táblázatban. 2013.10.22. 25

A keresés elve: Táblázat típus: lineárisan szétszórt altáblák módszere Ha a kiszámolt hely üres, akkor a táblában nem lehet, nem találtuk meg. Ha foglalt és ő van ott, akkor megtaláltuk. Ha törölt vagy nem ő van ott, akkor keresünk mögötte lineárisan az első üres helyig: Ha ott van, akkor megtaláltuk. Ha nincs ott, akkor nem találtuk meg. 2013.10.22. 26

Táblázat típus: lineárisan szétszórt altáblák módszere Keres(t,k,van,e): kk:=hash(k) Ha t.tab(kk).attr=üres akkor van:=hamis különben kk:=(kk+1) mod (Méret-1) Ciklus amíg t.tab(kk).attr üres és t.tab(kk).elem.kulcs k kk:=(kk+1) mod (Méret-1) Ciklus vége Ha t.tab(kk).elem.kulcs=k akkor van:=igaz; e:=t.tab(kk).elem különben van:=hamis Eljárás vége. 2013.10.22. 27

A beillesztés elve: Táblázat típus: lineárisan szétszórt altáblák módszere Ha a kiszámolt hely üres vagy törölt, akkor betehető oda. Ha foglalt és nem ő van ott, akkor lineárisan keresünk helyet (üreset vagy töröltet). Megjegyzés: ellenőrizhetnénk, hogy benne volt-e a táblázatban. 2013.10.22. 28

Táblázat típus: lineárisan szétszórt altáblák módszere Beilleszt(t,e): kk:=hash(e.kulcs) Ha t.tab(kk).attr {üres,törölt} akkor t.tab(kk):=(e,foglalt) különben kk:=(kk+1) mod (Méret-1) Ciklus amíg t.tab(kk).attr=foglalt kk:=(kk+1) mod (Méret-1) Ciklus vége t.tab(kk):=(e,foglalt) Eljárás vége. 2013.10.22. 29

Táblázat típus: lineárisan szétszórt altáblák módszere A törlés elve: Ha a kiszámolt hely üres, akkor a táblában nem lehet, a törlés hibás. Ha foglalt és ő van ott, akkor törölhető. Ha törölt vagy nem ő van ott, akkor lineárisan megkeressük: Ha ott van, törölhető. Ha nincs ott, akkor az hiba! 2013.10.22. 30

Táblázat típus: lineárisan szétszórt altáblák módszere Töröl(t,k): kk:=hash(k) Ha t.tab(kk).attr üres akkor Ha kk:=(kk+1) mod (Méret-1) Ciklus amíg t.tab(kk).attr üres és t.tab(kk).elem.kulcs k kk:=(kk+1) mod (Méret-1) Ciklus vége Ha t.tab(kk).elem.kulcs=k akkor t.tab(kk).attr:=törölt különben t.hiba:=igaz különben t.hiba:=igaz Eljárás vége. 2013.10.22. 31

Táblázat típus kiterjesztése További problémák: Lehetne-e a táblázat elemeit sorban is bejárni? A hash függvény mindenképpen szétszórja az elemeket, azaz ehhez valami más ábrázolás kellene (pl. bináris fa kitaposott úttal). Lehet-e a táblázat halmaz helyett multihalmaz? Ilyenkor a keresés az elsőt találná az azonos kulcsú elemek közül meg és innen sorban kellene bejárni a többi vele azonos kulcsút. 2013.10.22. 32

Adatszerkezetek I. 6. előadás vége