21. Adatszerkezetek Az adattípus absztrakciós szintjei Absztrakt adattípus (ADT) Absztrakt adatszerkezet (ADS) Egyszerű adattípusok Tömbök

Hasonló dokumentumok
22. GRÁFOK ÁBRÁZOLÁSA

Buborékrendezés: Hanoi Tornyai: Asszimptótikus fv.ek: Láncolt ábrázolás: For ciklussal:

7. BINÁRIS FÁK 7.1. A bináris fa absztrakt adattípus 7.2. A bináris fa absztrakt adatszerkezet

5. SOR. Üres: S Sorba: S E S Sorból: S S E Első: S E

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

2. AZ ADATTÍPUS ABSZTRAKCIÓS SZINTJEI...2

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

3. TÖMBÖK A tömb absztrakt adattípus Legyen T az E alaptípus feletti k ( 1) dimenziós tömb típus. Vezessük be az I I1

2. AZ ADATTÍPUS ABSZTRAKCIÓS SZINTJEI

Adatszerkezetek és algoritmusok

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

1.előadás Tornai Kálmán

Adatszerkezetek 1. Dr. Iványi Péter

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

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ás alapjai II. (7. ea) C++

6. LISTÁK ábra. A lista absztrakt adatszerkezet (ADS)

23. SZÉLESSÉGI BEJÁRÁS

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

Algoritmuselmélet. Gráfok megadása, szélességi bejárás, összefüggőség, párosítás. Katona Gyula Y.

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

Adatszerkezetek 2. Dr. Iványi Péter

Hierarchikus adatszerkezetek

Algoritmusok és adatszerkezetek

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA

Struktúra nélküli adatszerkezetek

Egyirányban láncolt lista

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK

Algoritmusok és adatszerkezetek gyakorlat 07

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

Más szavakkal formálisan:, ahol olyan egész szám, hogy. Más szavakkal formálisan:, ahol olyan egész szám, hogy.

Elemi adatszerkezetek

Adatszerkezetek Bevezetés Adatszerkezet Adatszerkezet típusok Műveletek Bonyolultság

Elsőbbségi (prioritásos) sor

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

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

Adatszerkezetek 1. előadás

Gráfok 1. Tárolási módok, bejárások. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Algoritmuselmélet 2. előadás

Adatszerkezetek és algoritmusok

4. VEREM. Üres: V Verembe: V E V Veremből: V V E Felső: V E

GRÁFOK ÉS ALGORITMUSOK ELMÉLETE VIZSGAKÉRDÉSEK Matematika BSc Elemző szakirány II. év 1. félév

15. A VERSENYRENDEZÉS

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

Adatszerkezetek 7a. Dr. IványiPéter

Fák Témakörök. Fa definíciója. Rekurzív típusok, fa adatszerkezet Bináris keresőfa, bejárások Bináris keresőfa, módosítás B-fa

Adatszerkezetek II. 1. előadás

III. Gráfok. 1. Irányítatlan gráfok:

Láncolt listák. PPT 2007/2008 tavasz.

Láncolt listák Témakörök. Lista alapfogalmak

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

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

Amortizációs költségelemzés

1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás

EGYSZERŰ, NEM IRÁNYÍTOTT (IRÁNYÍTATLAN) GRÁF

17. előadás: Vektorok a térben

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

Diszkrét matematika 2. estis képzés

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus.

A lista adatszerkezet A lista elemek egymásutániságát jelenti. Fajtái: statikus, dinamikus lista.

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

2. Visszalépéses stratégia

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

Információs Technológia

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

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

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

Verem Verem mutató 01

Kupac adatszerkezet. 1. ábra.

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Gráfok, definíciók. Gráfok ábrázolása. Az adott probléma megoldásához ténylegesen mely műveletek szükségesek. Ábrázolások. Példa:

Gráfalgoritmusok 3 Néhány probléma modellezése gráfokkal 3 Alapfogalmak, jelölések 7 Gráfok ábrázolása 9 Bejárási stratégiák, szélességi bejárás 15

Diszkrét matematika 2.C szakirány

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus adatszerkezetek. Dinamikus adatszerkezetek. Önhivatkozó struktúrák. Önhivatkozó struktúrák

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

Web-programozó Web-programozó

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

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

Térinformatikai adatszerkezetek

Adatszerkezetek I. 1. előadás

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Gráfelméleti feladatok. c f

GRÁFOK, GRÁF ALGORITMUSOK. Jegyzet

24. MINIMÁLIS KÖLTSÉGŰ UTAK I.

Gráfalgoritmusok Legrövidebb utak egy forrásból Dijkstra algoritmus Bellman-Ford algoritmus 31

GráfRajz fejlesztői dokumentáció

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

Algoritmuselmélet 7. előadás

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.

Modellezés Gregorics Tibor Mesterséges intelligencia

Logika es sz am ıt aselm elet I. r esz Logika 1/36

Házi feladatok megoldása. Nyelvek használata adatszerkezetek, képek leírására

Diszkrét matematika 2.C szakirány

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

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

Algoritmusok és adatszerkezetek II. régebbi vizsgakérdések.

Gráfelmélet. I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma

6. Elsőbbségi (prioritásos) sor

Átírás:

2. Adatszerkezetek Az adattípus absztrakciós szintjei http://people.inf.elte.hu/fekete/docs_/adt_ads.pdf Absztrakt adattípus (ADT) Az adattípust úgy specifikáljuk, hogy szerkezetére, reprezentálására, implementálására semmilyen megfontolást, előírást, utalást nem teszünk. A leírásban kizárólag matematikai fogalmak használhatók. Alapvetően két leírási mód terjedt el:. algebrai specifikáció (axiómák megadásával), 2. funkcionális specifikáció (elő- és utófeltétellel). Absztrakt adatszerkezet (ADS) Megmondjuk azt, hogy alapvetően milyen struktúrája van a szóban forgó adattípusnak. Az ADS szintet egy szerkezeti gráf és az ADT szinten bevezetett műveletek alkotják együttesen. A gráf csúcspontjai adatelemeket azonosítanak, az irányított élek pedig a közöttük fennálló rákövetkezési relációt ábrázolják. Az adatszerkezeteket osztályozhatjuk az általuk meghatározott gráf alakja szerint: lineáris, kétirányú vagy szimmetrikus lineáris, fa (struktúrájú), ortogonális többszörösen összefüggő = általános gráf alakú adatszerkezet. Egyszerű adattípusok http://people.inf.elte.hu/fekete/docs_/tomb_verem_sor.pdf Tömbök ADT: Legyen T egy E alaptípus feletti k ( ) dimenziós tömb típus. Vezessük be az I= I... I k indexhalmazt, ahol j [..k]: Ij = [..n j ]. Az A T tömbnek így N = n * n 2 *... * n k eleme van, melyek halmazát jelölje {a,..,a n }. Ekkor mindig van egy f:i->{a,..,a n } kölcsönösen egyértelmű leképzés. Jelölés: A[i,i 2,,i k ] tömbnek az a j elemét jelöli, ha az i,i 2,,i k indexekből alkotott rendezett k- as f szerinti képe a j érték: f(i,i 2,,i k )=j. Műveletek: (melyek bármely k esetén szerepelnek): indexelés (=tömbelem kiválasztása) a már bevezetett A[i,i 2,,i k] kifejezéssel, ami szerepelhet értékadó utasítás bal oldalán, és jobb oldalán is. Így lehetséges:. tömbelem lekérdezése, 2. tömbelem módosítása. A tömb merev adatszerkezet, a mérete nem változik, mert nem lehet a tömbbe egy elemet beszúrni, és nem lehet a tömbből egy elemet kitörölni. k = esetén a vektor, k = 2 esetén a mátrix elnevezés használatos, míg az általános esetben k-dimenziós tömbnek nevezzük az adattípust. ADS Az a megegyezés született, hogy j szerinti rákövetkezést is definiálnak: köv j A[i,,i j,,i k ] = A[i,,i j+,,i k ] (ahol i j < n j ) A vektor egy beosztásokkal ellátott szalag, a 2-dimenziós tömb egy mátrix, a 3-dimenziós tömb egy cellákra osztott téglatest alakját ölti gondolatainkban.

Aritmetikai ábrázolás: Csak akkor használjuk ezt a módot, ha a hatékony ábrázolás úgy kívánja. Az elemeket általában sorfolytonosan, ill. oszlopfolytonosan helyezzük egy vektorba. Láncolt ábrázolás: Tipikusan a hézagosan kitöltött mátrixot (más néven: ritka mátrixot) ábrázolják így. Verem ADT,ADS (a vizsgán se kérdezték ezeket, csak a műveleteket emelem ki, szerintem elég ha átfutjátok egyszer a pdf alapján a többit). Műveletek: Empty: V Üres verem konstans; az üres verem létrehozása IsEmpty: V L A verem üres voltának lekérdezése Push: V E V Elem betétele a verembe Pop: V V E Elem kivétele a veremből Top: V E A felső elem lekérdezése Megszorítások: D Pop = D Top = V \ {Empty} Aritmetikai ábrázolás Bevezetjük a top változót, mely mindig a legfelső elem indexe (top [..max]). A v vermet ábrázoló tömb: v[..max]. A szokásos műveletek mellett használni kell egy új, IsFull műveletet is, mivel a tömb betelhet, és ezt figyelni kell. Láncolt ábrázolás Itt a v változó egy pointert jelöl. Ebben az ábrázolásban v = top, tehát utóbbi felesleges, ezért nem is használjuk. Alkalmazásai: Lengyel forma, helyes zárójelezés feldolgozása stb. (Érdemes ezeket is átfutni egyszer, de nem ezeken van a hangsúly). 2

Sor ADT,ADS Műveletek: Empty: S Üres sor konstans; az üres sor létrehozása IsEmpty: S L A sor üres voltának lekérdezése In: S E S Elem betétele a sorba Out: S S E Elem kivétele a sorból First: S E Az első elem lekérdezése Megszorítások: DOut = DFirst = S \ {Empty} Aritmetikai ábrázolás Az s sor ebben az ábrázolásban egy rekordszerkezet, melynek része egy s[..max] tömb,amely a sor elemeit tartalmazza, egy e {,,max} index, amely mindenkor az első elemre mutat, valamint egy k {,, max} változó, amely a sor elemszámát jelzi. A sor úgy működik, hogy a sor végére rakjuk, ill. az elejéről veszünk ki az elemeket, ezért célszerű a tömb elejére beengedni a tömb végén kilógó elemeket, különben betelne úgy a tömb, hogy egyes indexei felhasználatlanok. Egy tipikus sor lassan körbemegy a tömbön. (A műveletek között szerepel az IsFull is). Láncolt ábrázolás Ekkor az s változó egy pointert jelöl. Az eleje pointert nem használjuk, mivel megegyezik s-sel. A műveletek: A sor alkalmazásai. Egyes pufferelési eljárásokban (pl. klaviatúránál). 2. Gráfok, ill. fák szélességi bejárásánál (pl. bináris fák szintfolytonos bejárása, lásd ott!). 3. Elméleti érdekesség: a sor körbetekerésével szimulálható a verem adatszerkezet, de a sor csak két veremmel valósítható meg. 3

Elsőbbségi sor http://people.inf.elte.hu/fekete/docs_/elsobbsegi_sor.pdf ADT Az egyszerűség kedvéért a P prioritásos sor típusba csak az egyes elemek prioritását tesszük be, az elemet magát nem. Így a sorban csak N-beli elemek vannak.. Műveletek Empty: P Üres IsEmpty: P L Üres? Insert: P N P Sorba Max: P N Első Prior / Első Elem DelMax: P P N Sorból 2. Megszorítások: D Max = D DelMax = P \ {Empty} ADS és reprezentációs szint Műveletigény:. megvalósítás: Rendezetlen tömbbe kerülnek az elemek, pl. a beírás sorrendjében. k jelzi a mindenkori elemszámot. Javítás: Nem nevezhetjük új megvalósítási módnak az alábbiakat, az előzőhez képest csak új változót vezetünk be: maxh mindig a maximális elem indexe (helye). 2. megvalósítás: Rendezett tömbben helyezzük el az elemeket. A maximális elem mindig az utolsó. Kihasználjuk azt, hogy egy rendezett tömbben egy elemet logaritmikus (=bináris) kereséssel meg lehet találni. 4

3. megvalósítás: Egy kupac tulajdonságú fát töltünk fel az elemekkel. A kupac (heap) egy olyan majdnem teljes, balra tömörített bináris fa (tehát az utolsó szint jobb oldaláról esetleg hiányozhatnak elemek), amelyben minden belső elem nagyobb, vagy egyenlő, mint a gyermekei. Insert: Az új csúcs beszúrásával meg kell tartanunk a kupac tulajdonságot, ezért az új csúcs az utolsó sorba, balról az első üres helyre, vagy ha az utolsó sor teljes, akkor egy új sor bal szélére kerül. De még rendbe kell hozni a csúcsok értékeinek viszonyát, tehát elemcseréket végzünk alulról a gyökér felé haladva a megfelelő élsorozaton (tömbnél a megfelelő láncon), ameddig szükséges. Nézzük ennek működését az alábbi kupacon, ha a 5-ös értéket szúrjuk be: Max: Ebben az esetben csak kiolvassuk a gyökérben lévő értéket. DelMax: A gyökérben lévő értéket kiolvassuk, majd a szintfolytonos bejárás során utolsóként bejárt (jobb alsó) értéket rakjuk a gyökérbe, az utolsó csúcs kitörlődik. A kupac tulajdonság megtartása érdekében a gyökérbe került értéket elemcserékkel lesüllyesztjük (mindig a nagyobb gyerekkel cserélve) a megfelelő helyre. Az alábbi kupacon láthatjuk ennek működését: 5

Lista http://people.inf.elte.hu/fekete/docs_/lista.pdf Ezen adatszerkezetnek számos változata van, melyeket az alábbi 3 fajta tulajdonság különbözteti meg egymástól: Egyirányú vagy kétirányú, Egyszerű vagy ciklikus, Fejelemes vagy fejelem nélküli. ADT - Egyirányú, egyszerű lista Műveletek: Üres: L Üres lista konstans; az üres lista létrehozása. Üres?: L L A lista üres voltának lekérdezése. Elsőre: L L Az aktuális elem-komponens első elemre állítása. Következőre: L L Az aktuális elem-komponens következő elemre állítása. Érték: L E Az aktuális elem értékének lekérdezése. Módosít: L E L Az aktuális elem értékének módosítása. Töröl: L L Az aktuális elem törlése. BeszúrUtán: L E L Adott értékű elem beszúrása az aktuális elem után. BeszúrElsőnek: L E L Adott értékű elem beszúrása első elemként. Utolsó?: L L Annak lekérdezése, hogy az aktuális elem az utolsó-e. Láncolt ábrázolás A listát rekordszerkezetként valósítjuk meg, melynek komponensei: A tulajdonképpeni lista pointere (l vagy FEJ), Az aktuális elemre mutató pointer (akt), Hibát jelző logikai változó (hiba), Esetleges további komponensek lehetnek: elemszám, előző, utolsó, stb.. Fejelem nélküli lista: Az akt pointer értéke NIL lesz üres lista esetén, de akkor is, ha lelépünk a listáról. Fejelemes lista: Ennél a megvalósításnál mindig létezik egy fejelem, melyben speciális adat van. Üres lista esetén a fejelem pointere NIL, az akt pointer a fejelemre mutat. 6

Kétirányú, egyszerű lista Fejelem nélküli: Fejelemes: Ciklikus lista (kétirányú) 7

Bináris fák http://people.inf.elte.hu/fekete/docs_/binaris_fak.pdf ADT - Műveletek: Üres: B Üres fa konstans; az üres fa létrehozása. Üres?: B L A fa üres voltának lekérdezése. EgyeleműFa: E B Adott értékkel egyelemű fa létrehozása. BeszúrBalra: B B B Balgyerekkel nem rendelkező fába való beszúrás. BeszúrJobbra: B B B Jobbgyerekkel nem rendelkező fába való beszúrás. Gyökérelem: B E A gyökérelem értékének lekérdezése. MódosítGyökér: B E B A gyökérelem értékének módosítása. Balgyerek: B B B A fa megváltoztatása nélkül a balgyerek-fa lekérdezése. Jobbgyerek: B B B A fa megváltoztatása nélkül a jobbgyerek-fa lekérdezése Töröl: B A fa törlése ADS A fa olyan körmentes irányított gráf, amelyre igazak az alábbiak: Pontosan egy csúcsba nem vezet él (ez a gyökér) A többi csúcsba pontosan egy él vezet Minden csúcs elérhető a gyökérből, mégpedig egyértelműen Az egyes csúcsokból kivezető élek száma minden fára korlátos (r > ) Az elnevezése ekkor: r-áris fa. Gyakorlatban az élek rendezett szelektornevekkel címkézettek. r = 2 esetén beszélünk bináris fákról. Ennél az adatszerkezetnél szokásos jelölések: t: bináris fa Ω: üres fa bal(t) vagy (t): balgyerek-fa jobb(t) vagy (t): jobbgyerek-fa gy(t): gyökérben lévő érték Láncolt reprezentáció Ebben a reprezentációs módban az alábbi jelölések használandók: t = NIL: Ω t^.bal ill. t^.jobb: bal(t) ill. jobb(t) t^.ért: gy(t) Aritmetikai reprezentáció A bináris fa elemeit különböző bejárási módoktól függő sorrendben helyezzük el egy vektorban. Preorder bejárás: ABDECFG Szintfolytonos bejárás: ABCDEFG Inorder bejárás: DBEAFCG Posztorder bejárás: DEBFGCA 8

Gráfok ábrázolása http://people.inf.elte.hu/fekete/docs_2/grafalg/grafalg.pdf Szomszédsági-mátrix (adjacencia-mátrix, csúcsmátrix) Legyen G=(V,E) véges gráf, és n a csúcsok száma. Ekkor a gráfot egy n n -es mátrixban ábrázoljuk, ahol az oszlopokat és a sorokat rendre a csúcsokkal indexeljük (ez leggyakrabban,..,n). Egy mezőben akkor van -es, ha a hozzá tartozó oszlop által meghatározott csúcs szomszédja a sor által meghatározott csúcsnak. azaz A[ i, j] =,, ha ( i, j) E, ha ( i, j) E Szomszédsági lista (éllista) Vegyünk fel, egy mutatókat tartalmazó Adj[..n] tömböt (a csúcsokkal indexeljük a tömböt). A tömbben lévő mutatók mutatnak az éllistákra. Irányított gráf esetén, az éllisták listaelemei reprezentálják az éleket. Az élnek megfelelő listaelemet abban a listában tároljuk, amelyik csúcsból kiindul az él, és a célcsúcs címét (tömb indexét, címkéjét stb.) eltároljuk a listaelemben. Tehát az ( i, j) E él megvalósítása: az i-edik listában egy olyan listaelemmel, amelyben eltároltuk a j-t, mint az él célcsúcsát. Irányítatlan gráf esetén, egy élnek két listaelemet feleltetünk meg, azaz egy irányított élt egy oda-vissza mutató, irányított élpárral valósítunk meg a korábban említett módon. Élsúlyozott gráf esetén, az él súlyát is a listaelemben fogjuk tárolni. Irányított gráf: Helyfoglalás: n + e Irányítatlan gráf: Helyfoglalás: n + 2e 9

Éllistás ábrázolás esetén gyorsan végignézhetjük egy adott csúcsból kiinduló éleket. Szomszédsági-mátrix ábrázolás esetén gyorsan eldönthető, hogy egy (i,j) pár éle-e a gráfnak