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

Hasonló dokumentumok
Adatszerkezetek 1. előadás

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

2. AZ ADATTÍPUS ABSZTRAKCIÓS SZINTJEI

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

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

Egyirányban láncolt lista

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

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

Struktúra nélküli adatszerkezetek

Adatszerkezetek és algoritmusok

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

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

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

Adatszerkezetek és algoritmusok

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

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

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

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

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

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

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

22. GRÁFOK ÁBRÁZOLÁSA

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

4. Előfeltételek (ha vannak) 4.1 Tantervi Nincs 4.2 Kompetenciabeli Elemi algoritmusok ismerete

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

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

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

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

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

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 félév során előkerülő témakörök

ALAPFOGALMAK 1. A reláció az program programfüggvénye, ha. Azt mondjuk, hogy az feladat szigorúbb, mint az feladat, ha

Adatszerkezet - műveletek

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

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

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

Elemi adatszerkezetek

Algoritmusok és adatszerkezetek II.

Algoritmuselmélet 2. előadás

Térinformatikai algoritmusok Elemi algoritmusok

Algoritmusok és adatszerkezetek gyakorlat 07

Adatszerkezetek I. 1. előadás

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

Adatszerkezetek 1. Dr. Iványi Péter

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

Hierarchikus adatszerkezetek

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

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

Tartalomjegyzék. Köszönetnyilvánítás. 1. Az alapok 1

Objektumorientált paradigma és a programfejlesztés

Térinformatikai algoritmusok Elemi algoritmusok

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

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

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

PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

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

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

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

Kiegészítő részelőadás 1. Az algoritmusok hatékonyságának mérése

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

Számláló rendezés. Példa

Algoritmusok és adatszerkezetek

10. modul: FÜGGVÉNYEK, FÜGGVÉNYTULAJDONSÁGOK

ELTE IK Esti képzés tavaszi félév. Tartalom

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

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

Programozási módszertan

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

Objektumorientált paradigma és programfejlesztés Bevezető

Komputeralgebra Rendszerek

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

Programfejlesztési Modellek

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK

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

Adatszerkezetek 2. Dr. Iványi Pé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 7a. Dr. IványiPéter

S0-02 Típusmodellek (Programozás elmélet)

Adatszerkezetek és algoritmusok

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

1. előadás. Lineáris algebra numerikus módszerei. Hibaszámítás Számábrázolás Kerekítés, levágás Klasszikus hibaanalízis Abszolút hiba Relatív hiba

15. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 30.

15. A VERSENYRENDEZÉS

Önszervező bináris keresőfák

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Bemutatkozás. Bemutatkozás. Bemutatkozás. Bemutatkozás. 1. előadás. A tárgy címe: A programozás alapjai 1

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

4. Fuzzy relációk. Gépi intelligencia I. Fodor János NIMGI1MIEM BMF NIK IMRI

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

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

Generikus osztályok, gyűjtemények és algoritmusok

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

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

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Bevezetés az informatikába

Web-programozó Web-programozó

Relációk Függvények. A diákon megjelenő szövegek és képek csak a szerző (Kocsis Imre, DE MFK) engedélyével használhatók fel!

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Átírás:

1.előadás Tornai Kálmán tornai.kalman@itk.ppke.hu

Általános tudnivalók Előadás: 2 óra (Labor)gyakorlat: 3 óra Előismeretek: Kötelező: Bevezetés a programozásba I-II. Algebra és diszkrét matematika I. II. Kreditpont: 5 Anyagok fent lesznek: https://users.itk.ppke.hu/~kami

Általános tudnivalók Irodalom: Cormen, T. H. Leiserson, C. E. Rivest, R. L. Stein, C.: Új algoritmusok. Scolar Kiadó, Budapest, 2003. Rónyai, L. Ivanyos, G. Szabó, R.: Algoritmusok. Typotex Kiadó, Budapest, 1999.

Órabeosztás Előadás 10:30 12:00 Ebédszünet 12:00 12:40 Gyakorlat (I.) 12:40 14:10 Szünet 14:10 14:30 Gyakorlat (II.) 14:30 15:15

Követelmények Jegy: Vizsga + gyakorlati jegy (1:1) Vizsga előfeltétele az érvényes (>1) gyakorlati jegy Késés nincs! Az előadások látogatása kötelező

Követelmények Gyakorlati jegy: Hiányzás: max. 3 Röpzh-k: minden gyakorlaton (előadás anyagából is). A legjobb kilenc átlaga > 50% Kötelező házi feladat minden héten. A házikat a [-1, 1] intervallumon pontozom. Ahol -1 ha értékelhetetlen, vagy hiányzik, vagy másolt. Minden házinak szerda reggel tízig kell megérkeznie. A házik összértéke pozitív szám legyen!

Követelmények Gyakorlati jegy (folyt.): Nagyzh-k: November 3.: papír & toll: csak kútfő A pótló héten: géptermi: mindent lehet használni. Cél: mindegyik >= 2. Ha egyik = 1, akkor pótzh! Ha mindkettő 1, nincs jegy! Pótzh: vizsgaidőszakban (2011. január elején) Nagyházi: 1 db a félév során Implementációs terv beugró az 1. nagyzh-hoz! Elkészítése beugró a 2. nagyzh-hoz!

Követelmények Gyakorlati jegy számítása: első ZH: 30% második ZH: 40% nagyházi feladat: 25% féléves munka: 5%

A tárgy célja egyszerű, hasznos típusok/adatszerkezetek és általánosan használt algoritmusok megismerése, az adatszerkezetek és algoritmusok hatékonyságának elemzése programozási gyakorlat szerzése

Adatszerkezetek megközelítése Nem fejlesztünk ki egy típuselméletet Szemléletmód kialakítása a fontos A könyvekben sokféle szemlélet és leírási mód található A (zavaró) sokféleség fő oka: a típus-szemlélet hiánya/mellőzése

Tematika I. ALAPFOGALMAK Az adattípus absztrakciós szintjei II. ALAPVETŐ ADATSZERKEZETEK Tömb Verem Sor Elsőbbségi (prioritásos) sor és a kupac (heap) Listák Hierarchikus adatszerkezetek és bináris fák

Tematika III. KERESÉSEK Bináris keresőfák AVL fák Piros-fekete fák 2-3 fák, B-fák

Tematika IV. RENDEZÉSEK Algoritmusok műveletigényének elemzése - ismétlés Az összehasonlításos rendezők alaptétele Három lassú rendezés: buborék, beszúró és max. kiv. rendezés Kupacrendezés (heap sort) Gyorsrendezés (quick sort) Összefésülő rendezés (merge sort) és külső rendezések Edényrendezések Hasításos technikák (hash-elés)

Típusok Kezdetben Egy adat típusán csak az adat által felvehető értékek halmazát értik. Ma A típus egy adat által felvehető lehetséges értékek halmazán kívül megadja az adaton értelmezett műveleteket is.

A típus-absztrakció szintjei Absztrakt adattípus (ADT) semmit nem feltételez a belső szerkezetről enkapszuláció Absztrakt adatszerkezet (ADS) Absztrakt szerkezet irányított gráf mutatja a rákövetkezéseket: csúcsok adatelemek élek rákövetkezések

A típus-absztrakció szintjei Reprezentáció ADS gráf az absztrakt memóriában, fontos: rákövetkezések megmaradjanak! láncolt vagy aritmetikai ábrázolás Implementáció - programnyelven Fizikai ábrázolás - az illúzió vége: bitek

Típus-specifikáció Egy adat külső jellemzésére szolgál (interfész). típusérték-halmaz: Az adat által felvehető értékek T halmaza. típusműveletek: T-n értelmezett feladatok. Önálló szerepet játszik a programtervezésben. Megadására többféle lehetőség van: algebrai specifikáció (axiómák megadásával) funkcionális specifikáció (elő- és utófeltételekkel)

Típus A típus-reprezentáció (típusértékek ábrázolása) Ábrázoló elemek H halmaza. (típus-szerkezet) Az ábrázoló elemek és a típusértékek kapcsolatát leíró leképezés: : H T, H T A típus-invariáns kiválasztja a hasznos ábrázoló elemeket: I : H L, [I] A típus-implementáció (műveletek helyettesítése) Nem a típusértékekkel, hanem az azokat ábrázoló elemekkel működő programok.

A típus specifikáció és a típus kapcsolata az F művelet specifikációja F specifikáció szintje Domain F Range F S reprezentáció szintje Domain S Range S az F művelet implementációja az S program

Absztrakt adattípus A típus-specifikáció (közvetett) megadására szolgál Nem szükséges, hogy egy konkrét programozási környezetben ábrázoljuk a típusértékeket. Elég a műveletek programjainak csak a hatását ismerni. Absztrakt a programozási környezet számára és a megoldandó feladat számára. Szükség van egy őt kiváltó (konkrét) típusra. Részfeladatokra bontás eszköze.

Absztrakt adattípus A típus szemléletének ez a legmagasabb szintje Semmilyen feltételezéssel nem élünk a típus szerkezetéről, megvalósításáról! A specifikációban csak tisztán matematikai fogalmakat használhatunk Ez a szint nem a formalizálás mértékétől absztrakt; lehet informálisan is gondolkodni, beszélni ADT szinten!

Az ADT algebrai specifikációja Részei: típusérték halmaz műveletek (mint leképezések) megszorítások (értelmezési tartományok) axiómák Kérdések: helyesség (ellentmondásmentesség) teljesség /nehéz redundancia /nem fontos

Példa: VEREM Köznapi fogalma: mókus borz nyuszi süni LIFO last-in, first-out

Példa: A verem ADT axiomatikus leírása E alaptípus feletti V verem típus jellemzése: Műveletek: ("full" nem szerepel) empty: V (az üres verem konst.- létrehozás) isempty: V L (üres a verem?) push: V x E V (elem betétele a verembe) pop: V V x E (elem kivétele a veremből) top: V E (felső elem lekérdezés) Megszorítások: pop és top ért. tart.: V \ {empty}

Példa: A verem ADT axiomatikus leírása Axiómák: isempty(empty) vagy: v=empty isempty(v) isempty(v) v = empty isempty(push(v, e)) pop(push(v,e)) = (v, e) push(pop(v)) = v top(push(v,e)) = e

Az ADT funkcionális specifikációja A típus matematikai reprezentációját használjuk Ez semmilyen módon nem kell, hogy utaljon a típus ábrázolási módjának megválasztására a megvalósítás során! Részei: típusérték halmaz műveletek állapottér paramétertér előfeltétel utófeltétel

Példa: A verem ADT funkcionális leírása Matematikai reprezentáció: a verem rendezett párok halmaza v={(e 1, t 1 ), (e i, t i ) a t j komponensek különbözőek} 1. komponens: a veremben elhelyezett (push) érték 2. komponens: a verembe helyezés (push) időpontja Megszorítás (invariáns): az idő értékek különbözők NEM így implementáljuk!

Példa: A verem ADT funkcionális leírása A pop specifikációja: A = V x E B = V v v e Q = (v = v v ) - állapottér - a kezdeti állapot értékei - előfeltétel - utófeltétel: R = ( (v = v \ {(e j, t j )} ) (e = e j ) ((e j, t j ) v ) ( i ( (e i, t i ) v i j ): t j > t i ))

Algoritmusok/probléma-megoldás ADT szinten A típus értékeit csak a típusműveletek segítségével lehet változtatni Azt sem tudjuk, hogy a műveletek hogyan működnek A típus fekete doboz, semmilyen megkötés nincs a szerkezetéről!

Absztrakt adatszerkezet (ADS) Széles körben használják az oktatásban, könyvekben A típus alapvető - absztrakt - szerkezetét egy irányított gráffal ábrázoljuk A gráf jelentése: csúcsok: adatelemek élek: rákövetkezési reláció A műveletek ezen a szinten is jelen vannak (ha egy típus ADS-éről van szó) A műveletek hatása szemléltethető az ADS-gráf változásaival

Példa: kupac (heap) (az elsőbbségi sor szokásos reprezentáció) 9 8 6 5 6 3 5 2 3 4 1 2 bináris fa majdnem teljes balra tömörített a szülő csúcsokban nagyobb értékek vannak, mint a gyerek csúcs(ok)ban

Reprezentáció az absztrakt memóriában az absztrakt szerkezet ábrázolható pointerekkel (láncolt ábr.), vagy cím-/indexfüggvénnyel (aritmetikai repr.) (vegyes ábrázolás lehetséges) Mindkét reprezentáció megadja az adatelemek közötti rákövetkezési relációt További rákövetkezések is megadhatók pointerekkel, ill. kiolvashatók az indexfüggvényből, mint amelyet az ADS leírt!

Pointeres ábrázolás (láncolás) Példa: kupac láncolt ábrázolása Az ADS-gráf éleit pointerekkel ábrázoljuk A műveletek algoritmusait itt már meg kell adni A feladatban bevezetett függvények kiszámító algoritmusait is meg kell adni (szemben az ADS-sel) Következmény: egy feladat megoldása gazdagabb reprezentációt igényelhet, mint maga az ADS t 4 3 2 2 1 1 last

Aritmetikai reprezentáció: cím-/indexfüggvény megadása Az adatelemeket folyamatosan elhelyezzük az absztrakt memóriában/ egy ugyanilyen alaptípusú vektorban Az elemek közötti rákövetkezési relációt egy cím-/ indexfüggvénnyel adjuk meg A címfüggvényből további rákövetkezések is kiolvashatók, nem csak az ADS-beli A műveletek és a feladat-specifikus függvények algoritmusait meg kell adni

Példa: (majdnem) teljes bináris fa indexfüggvénye Szintfolytonosan: index(bal(a)) = 2*index(a) index(jobb(a)) = 2*index(a)+1

Ami még hiányzik Az implementáció szintje egy programnyelv, illetve fejlesztő környezet megválasztását jelenti gyakorlatokon látjuk majd. A fizikai ábrázolás szintjén azt vizsgáljuk, hogy az adatszerkezet hogyan képeződik le a memória bájtjaira ezzel ebben a tárgyban nem foglalkozunk, kicsit lesz róla szó a gyakorlatokon.

Az adatszerkezetek osztályozása Az adatszerkezet definíciója: egy <A,R> rendezett pár, ahol A : az adatelemek véges halmaza R : az A halmazon értelmezett valamilyen reláció (A x A)

Az adatszerkezetek osztályozása Az adatelemek típusa szerint Homogén Az adatszerkezet valamennyi eleme azonos típusú. Heterogén Az adatszerkezet elemei különböző típusúak lehetnek.

Az adatszerkezetek osztályozása Az elemek közti R reláció szerint Struktúra nélküli Az egyes adatelemek között nincs kapcsolat. Nem beszélhetünk az elemek sorrendjéről (Pl. halmaz). Asszociatív címzésű Az adatelemek között lényegi kapcsolat nincs. Az adatszerkezet elemei tartalmuk alapján címezhetők.

Az adatszerkezetek osztályozása Szekvenciális A szekvenciális adatszerkezet olyan <A, R> rendezett pár amelynél az R reláció tranzitív lezártja teljes rendezési reláció (Pl. egyszerű lista). Szekvenciális adatszerkezetben az egyes adatelemek egymás után helyezkednek el. Az adatok között egy-egy jellegű a kapcsolat: minden adatelem csak egy helyről érhető el és az adott elemről csak egy másik látható. Két kitüntetett elem az első és az utolsó.

Az adatszerkezetek osztályozása Intuitív ADT és ADS szint: Végigmehetünk az elemeken egymás után. Lehetőség van a módosítás, törlés, beszúrás műveletekre.

Az adatszerkezetek osztályozása Hierarchikus A hierarchikus adatszerkezet olyan <A,R> rendezett pár, amelynél van egy kitüntetett r elem, ez a gyökérelem, úgy, hogy: r nem lehet végpont a A\ {r} elem egyszer és csak egyszer végpont a A\ {r} elem r-ből elérhető Az adatelemek között egy-sok jellegű kapcsolat áll fenn. Minden adatelem csak egy helyről érhető el, de egy adott elemből akárhány adatelem látható (Pl. fa, összetett lista, B-fa).

Bináris fa a b c d e f g h i j

Az adatszerkezetek osztályozása Hálós A hálós adatszerkezet olyan <A,R> rendezett pár, amelynél az R relációra semmilyen kikötés nincs. Az adatelemek között a kapcsolat sok-sok jellegű: bármelyik adatelemhez több helyről is eljuthatunk, és bármelyik adatelemtől elvileg több irányban is mehetünk tovább (Pl. gráf, irányított gráf).

Az adatszerkezetek osztályozása Az adatelemek száma szerint Statikus Egy statikus adatszerkezetet rögzített számú adatelem alkot. A feldolgozás folyamán az adatelemek csak értéküket változtathatják, de maga a szerkezet, az abban szereplő elemek száma változatlan. Következésképpen az adatszerkezetnek a memóriában elfoglalt helye változatlan a feldolgozás során.

Az adatszerkezetek osztályozása Dinamikus Egy dinamikus adatszerkezetben az adatelemek száma egy adott pillanatban véges ugyan, de a feldolgozás során tetszőlegesen változhat. Dinamikus adatszerkezetek lehetnek rekurzív vagy nem-rekurzív, lineáris vagy nem-lineáris struktúrák.

Az adatszerkezetek osztályozása Egy adatszerkezet rekurzív, ha definíciója saját magára való hivatkozást tartalmaz. Ha egyetlen ilyen hivatkozás van, akkor lineáris a struktúra, ha több, akkor nem-lineáris. Mivel a dinamikus adatszerkezetek feldolgozása során az adatelemek száma változik, egy-egy elemnek területet kell allokálnunk, ill. a lefoglalt területeket fel kell szabadítanunk, így felvetődik a tárolóhely újrahasznosításának problémája.

Az adatszerkezetek osztályozása Reprezentáció szerint Az egyes adatszerkezetek mind folytonos, mind szétszórt módon tárolhatók, de a leképezés és a műveletek megvalósítása annál egyszerűbb, minél jobban illeszkedik az adatszerkezet a tárolási szerkezetre. Az asszociatív és a sztring szerkezetek nagyon jól tárolhatók folytonosan. A hierarchikus és hálós szerkezetek elsősorban szétszórt tárolással kezelhetők. A verem és a sor mindkét módon tárolhatók.

Az adatszerkezetek osztályozása Folytonos ábrázolású A központi tárban a tárelemek egymás után helyezkednek el. Az adattételek tárolási jellemzői (típus, ábrázolási forma, méret) azonosak. Ismert az első elem címe, ehhez képest bármely elem címe számítható. Legyen minden elem hossza H byte és jelölje loc(a 1 ) az első adatelem címét. Ekkor loc(a N )=loc(a 1 )+(N-1)*H Szétszórt ábrázolású A tárelemek véletlenszerűen helyezkednek el, közöttük a kapcsolatot az teremti meg, hogy minden elem tartalmaz más elemek elhelyezkedésére vonatkozó információt (az elemek címét).