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

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

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

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

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

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

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

ADATSZERKEZETEK (VEREM, SOR)

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

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

Aritmetikai kifejezések lengyelformára hozása

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Adatszerkezetek II. 2. előadás

Adatszerkezetek I. 1. előadás

Verem Verem mutató 01

Gráfok bejárása. Szlávi Péter, Zsakó László: Gráfok II :17

Adatszerkezetek II. 1. előadás

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

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

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

A verem (stack) A verem egy olyan struktúra, aminek a tetejéről kivehetünk egy (vagy sorban több) elemet. A verem felhasználása

Adatszerkezetek I. 4. előadás

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

Adatszerkezetek 1. Dr. Iványi Péter

Egyszerű programozási tételek

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

A félév során előkerülő témakörök

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

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

Adatszerkezetek I. 9. előadás

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

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

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

Absztrakt adatstruktúrák A bináris fák

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

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

Adatszerkezetek és algoritmusok

Szövegfeldolgozás II.

Rekurzió. Dr. Iványi Péter

Adatszerkezetek 1. előadás

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

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

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

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

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

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

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

Adatszerkezetek 2. Dr. Iványi Péter

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

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

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

Struktúra nélküli adatszerkezetek

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

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés

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

Véges állapotú gépek (FSM) tervezése

Pénzügyi algoritmusok

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

Gyakorló feladatok: Formális modellek, temporális logikák, modellellenőrzés. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny döntő fordulójának feladatai. INFORMATIKA II. (programozás) kategória

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

Programozási segédlet

Táblázatok fontosabb műveletei 1

Matlab alapok. Baran Ágnes. Baran Ágnes Matlab alapok Elágazások, függvények 1 / 15

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

Zárthelyi mintapéldák. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

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

Bevezetés a programozásba. 5. Előadás: Tömbök

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

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

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata

Programozási alapismeretek 1. előadás

Programozási nyelvek Python

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

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

Összetett programozási tételek

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

Programozás I gyakorlat

ELEMI PROGRAMOZÁSI TÉTELEK

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Web-programozó Web-programozó

A 2008/2009 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. INFORMATIKÁBÓL II. (programozás) kategóriában

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

Rekurzió. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

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

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

Szekvenciális hálózatok és automaták

Véges állapotú gépek (FSM) tervezése

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.

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

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

Algoritmusok és adatszerkezetek 2.

Java II. I A Java programozási nyelv alapelemei

Adatszerkezetek I. 6. előadás

Java II. I A Java programozási nyelv alapelemei

1. Jelölje meg az összes igaz állítást a következők közül!

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

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

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Átírás:

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

Verem Verem= speciális sorozattípus Műveletei: Üres, üres?, Verembe, Veremből, tető Üres: Verem üres?(verem): Logikai tető(verem): Elem {NemDef} Verembe(Verem,Elem): Verem {NemDef} Veremből(Verem,Elem): (Verem Elem) {NemDef} 2/42

Verem A műveletek specifikációja Üres(V): ef:, uf: V=() üres?(v): ef:, uf: üres?=v=() Verembe(V,e): ef: V=W, uf: V=(W,e) Veremből(V,e): ef: V=(W,f), uf: V=W és e=f Megjegyzés: ef nem üres?(v) tető(v): ef: V=(W,f), uf: tető=f Megjegyzés: ef nem üres?(v) 3/42

Verem A műveletek tulajdonságai Üres veremre a verembe rakás és az üresség vizsgálat kivételével minden művelet értelmetlen. A veremből kivétel a verembe utoljára tett elemet veszi ki, azaz a verem alkalmas egy sorozat megfordítására. A tetőn mindig a verembe utoljára betett (legfelül levő) elem látszik. 4/42

Verem Megvalósítás folytonos, szekvenciális ábrázolással Verem(Típus TElem): Konstans MaxMélység: Egész(???) Típus VeremElem=TElem Változó t: Tömb(1..MaxMélység: VeremElem) teteje: 0..MaxMélység Probléma: MaxMélység=???? 5/42

Verem Eljárás Üres(V): V.teteje:=0 Függvény üres?(v): üres?:=v.teteje=0 Függvény vége. Függvény tető(v): tető:=v.t(v.teteje) Függvény vége. 6/42

Verem Eljárás Verembe(V,e): V.teteje:=V.teteje+1 V.t(V.teteje):=e Eljárás Veremből(V,e): e:=v.t(v.teteje) V.teteje:=V.teteje-1 Meggondolandó: hibakezelés hol és mikor kell? 7/42

Verem Megvalósítás dinamikus láncolással Verem(Típus TElem): Típus VeremElem=Rekord(érték: TElem alatta: Mutató(VeremElem) Változó teteje: Mutató(VeremElem) Magyarázat: a láncolásnak nincs szerepe a hatékonyság szempontjából (nincs beszúrás vagy törlés középen), csak a memória lefoglalási lehetőséget használjuk ki. 8/42

Verem Eljárás Üres(V): V.teteje:=Sehova Függvény üres?(v): üres?:=v.teteje=sehova Függvény vége. Függvény tető(v): tető:=tartalom(v.teteje).érték Függvény vége. Emlékeztető: Eljárás Üres(V): V.teteje:=0 Függvény üres?(v): üres?:=v.teteje=0 Függvény vége. Függvény tető(v): tető:=v.t(v.teteje).érték Függvény vége. 9/42

Verem Eljárás Verembe(V,e): Lefoglal(w,(e,V.teteje)) V.teteje:=w Eljárás Veremből(V,e): Eljárás Verembe(V,e): V.teteje:=V.teteje+1 V.t(V.teteje):=e Eljárás Veremből(V,e): e:=v.t(v.teteje) V.teteje:=V.teteje-1 e:=tartalom(v.teteje).érték; w:=v.teteje V.teteje:=tartalom(V.teteje).alatta Felszabadít(w) A lefoglalás másképpen: Lefoglal(w) tartalom(w).érték:=e tartalom(w).alatta:=v.teteje 10/42

Verem Megvalósítás dinamikus láncolással (hibakezeléssel) Verem(Típus TElem): Típus VeremElem=Rekord(érték: TElem alatta: Mutató(VeremElem)) Változó teteje: Mutató(VeremElem) hiba: Logikai 11/42

Verem Eljárás Üres(V): V.teteje:=Sehova; V.hiba:=hamis Eljárás Verembe(V,e): Lefoglal(w,(e,V.teteje)) V.teteje:=w 12/42

Verem Függvény tető(v): Ha v.teteje=sehova akkor V.hiba:=igaz különben tető:=tartalom(v.teteje).érték Függvény vége. Eljárás Veremből(V,e): Ha v.teteje=sehova akkor V.hiba:=igaz különben e:=tartalom(v.teteje).érték w:=v.teteje V.teteje:=tartalom(V.teteje).alatta Felszabadít(w) 13/42

Verem Speciális verem műveletek a FORTH nyelvből swap(v): a két felső elem cseréje ef: V=(W,e,f), uf: V=(W,f,e) dup(v): a felső elem duplikálása ef: V=(W,e), uf: V=(W,e,e) over(v): a felső alatti elem duplikálása a verem tetején ef: V=(W,e,f), uf: V=(W,e,f,e) rot(v): a felső három elem ciklikus léptetése ef: V=(W,e,f,g), uf: V=(W,f,g,e) 14/42

Verem Eljárás swap(v): e:=tartalom(v.teteje).érték w:=tartalom(v.teteje).alatta tartalom(v.teteje).érték:=tartalom(w).érték tartalom(w).érték:=e 15/42

Verem Eljárás dup(v): e:=tartalom(v.teteje).érték Lefoglal(w,(e,V.teteje)) V.teteje:=w 16/42

Verem Eljárás over(v): w:=tartalom(v.teteje).alatta e:=tartalom(w).érték Lefoglal(w,(e,V.teteje)) V.teteje:=w 17/42

Verem Eljárás rot(v): w:=tartalom(v.teteje).alatta x:=tartalom(w).alatta e:=tartalom(x).érték tartalom(x).érték:=tartalom(w).érték tartalom(w).érték:=tartalom(v.teteje).érték tartalom(v.teteje).érték:=e 18/42

Verem alkalmazás Egy kifejezés (,) és [,] zárójelpárokat tartalmaz. Ellenőrizzük a helyességét! Hibás esetek: x([y)] hibás párosítás x(a - nyitó zárójelnek nincs csukó párja x)a( - csukó zárójelnek nincs nyitó párja 19/42

Verem alkalmazás Függvény helyes(k): i:=1; h:=igaz; V:=üres Ciklus amíg i hossz(k) és h Ha K(i)= ( vagy K(i)= [ akkor Verembe(V,K(i)) különben ha K(i)= ) vagy K(i)= ] akkor Veremből(V,s) h:= K(i)= ) és s= ( vagy K(i)= ] és s= [ i:=i+1 Ciklus vége helyes:=h és nem V.hiba és üres?(v) 20/42

Sor Sor= speciális sorozattípus Műveletei: Üres, üres?, Sorba, Sorból, első Üres: Sor üres?(sor): Logikai első(sor): Elem {NemDef} Sorba(Sor,Elem): Sor {NemDef} Sorból(Sor,Elem): (Sor Elem) {NemDef} 21/42

Sor A műveletek specifikációja Üres(S): ef:, uf: S=() üres?(s): ef:, uf: üres?=s=() Sorba(S,e): ef: S=W, uf: S=(W,e) Sorból(S,e): ef: S=(f,W), uf: S=W és e=f Megjegyzés: ef nem üres?(s) első(s): ef: S=(f,W), uf: első=f Megjegyzés: ef nem üres?(s) 22/42

Sor A műveletek tulajdonságai Üres sorra a sorba rakás és az üresség vizsgálat kivételével minden művelet értelmetlen. A sorból kivétel a sorba legrégebben tett elemet veszi ki, azaz a sor alkalmas egy sorozat feldolgozására, ha a keletkezés és a feldolgozás üteme eltér egymástól. A sor elején mindig a sorba legrégebben betett (legelöl levő) elem látszik. 23/42

Sor Megvalósítás folytonos, szekvenciális ábrázolással Sor(Típus TElem): Konstans MaxHossz: Egész(???) Típus SorElem=TElem Változó t: Tömb(1..MaxHossz: SorElem) első,utolsó,db: 0..MaxHossz A tömböt ciklikusan kezeljük: ha a végére értünk és az elején már szabadult fel hely, ott folytatjuk a kitöltést. Probléma: MaxHossz=???? 24/42

Sor Eljárás Üres(S): S.első:=1; S.utolsó:=0; S.db:=0 Függvény üres?(s): Üres?:=S.db=0 Függvény vége. Függvény első(s): első:=s.t(s.első) Függvény vége. 25/42

Sor Eljárás Sorba(S,e): Ha S.utolsó=Maxhossz akkor S.utolsó:=1 különben S.utolsó:=S.utolsó+1 S.db:=S.db+1; S.t(S.utolsó):=e Eljárás Sorból(S,e): e:=s.t(s.első); S.db:=S.db-1 Ha S.első=Maxhossz akkor S.első:=1 különben S.első:=S.első+1 S.utolsó S.első 26/42

Sor Megvalósítás dinamikus láncolással Sor(Típus TElem): Típus SorElem=Rekord(érték: TElem köv: Mutató(SorElem)) Változó eleje,vége: Mutató(SorElem) Megjegyzés: Itt sem használunk középre beszúrást, középről törlést, azaz a láncolást csak a tömbméret korlát elhagyása miatt használjuk. 27/42

Sor Eljárás Üres(S): S.eleje:=sehova; S.vége:=sehova Függvény üres?(s): Üres?:=S.eleje=sehova Függvény vége. Függvény első(s): első:=tartalom(eleje).érték Függvény vége. Emlékeztető: Eljárás Üres(S): S.első:=1; S.utolsó:=0 S.db:=0 Függvény üres?(s): Üres?:=S.db=0 Függvény vége. Függvény első(s): első:=s.t(s.első) Függvény vége. 28/42

Sor Eljárás Sorba(S,e): Lefoglal(újvége,(e,sehova)) Ha S.vége=sehova akkor S.eleje:=újvége különben tartalom(s.vége).köv:=újvége S.vége:=újvége 29/42

Sor Eljárás Sorból(S,e): e:=tartalom(s.eleje).érték újeleje:=tartalom(s.eleje).köv Felszabadít(S.eleje) S.eleje:=újeleje Ha S.eleje=sehova akkor S.vége:=sehova 30/42

Sor Megvalósítás dinamikus láncolással (hibakezeléssel) Sor(Típus TElem): Típus SorElem=Rekord(érték: TElem köv: Mutató(SorElem)) Változó eleje,vége: Mutató(SorElem) hiba: Logikai 31/42

Sor Eljárás Üres(S): S.eleje:=sehova; S.vége:=sehova; S.hiba:=hamis Függvény első(s): Ha S.eleje=sehova akkor S.hiba:=igaz különben első:=tartalom(s.eleje).érték Függvény vége. 32/42

Sor Eljárás Sorba(S,e): Lefoglal(új,(e,sehova)) Ha S.vége=sehova akkor S.eleje:=új különben tartalom(s.vége).köv:=új S.vége:=új 33/42

Sor Eljárás Sorból(S,e): Ha S.eleje=sehova akkor S.hiba:=igaz különben e:=tartalom(s.eleje).érték újeleje:=tartalom(s.eleje).köv Felszabadít(S.eleje) S.eleje:=újeleje Ha S.eleje=sehova akkor S.vége:=sehova 34/42

Sor alkalmazás Példa: Egy vasútvonal két állomásán egy nap feljegyeztük, az összes egyik irányba áthaladó vonat indulási, illetve érkezési idejét (idő szerinti sorrendben). Adjuk meg az áthaladt vonatok menetidőit a két állomás között! (Nincs előzés.) Ötlet: A korábban érkező adatot egy sorban várakoztatjuk addig, amíg a párja meg nem érkezik. 35/42

Sor alkalmazás Forgalom: Nyit(f); Nyit(g); Üres(S) Ciklus amíg nem vége?(f) Olvas(f,adat) Ha adat.állomás=1 akkor Sorba(S,adat.idő) különben Sorból(S,előző) Ír(g,adat.idő-előző) Ciklus vége Zár(f); Zár(g) 36/42

Sor alkalmazás Példa: Egy egyirányú utcában két jelzőlámpánál figyelik az áthaladó autókat: mikor haladt át a lámpánál. Az adatok megfigyelési idő szerinti sorrendben érkeznek. N db autót figyeltek meg. Csoportosítsuk az adatokat, hogy az első lámpánál történt megfigyelések időbeli sorrendjüket megtartva előzzék meg a második lámpánál megfigyelt adatokat! (Az utcában előzés nincs.) Ötlet: Az 1-es lámpa adatai azonnal írhatók az eredménybe, a 2-es lámpa adatait egy átmeneti sorban tároljuk, s a végén írjuk az eredménybe. A sor ha a mérete indokolja persze lehet háttértáron is. 37/42

Sor alkalmazás Ötlet: Az 1-es lámpa adatai azonnal írhatók az eredménybe, a 2- es lámpa adatait egy átmeneti sorban tároljuk, s a végén írjuk az eredménybe. A sor ha a mérete indokolja persze lehet háttértáron is. A bemenet és a kimenet is forgalom típusú adatok fájlja, és a sorban is ilyeneket tárolunk: Forgalom=Rekord(lámpa: {1,2}, idő: Egész) Változó S: Sor(Forgalom) 38/42

Sor alkalmazás Forgalom: Nyit(f); Nyit(g); Üres(S) Ciklus amíg nem vége?(f) Olvas(f,adat) Ha adat.lámpa=1 akkor Ír(g,adat) különben Sorba(S,adat) Ciklus vége Ciklus amíg nem üres?(s) Sorból(S,adat); Ír(g,adat) Ciklus vége Zár(f); Zár(g) 39/42

Kétvégű sor Kétvégű sor= speciális sorozattípus Műveletei: Üres, üres?, Sorelejére, Sorvégére, első, Sorelejéről, Sorvégéről Üres: Sor Sorelejére(Sor,Elem): Sor {NemDef} Sorvégére(Sor,Elem): Sor {NemDef} Sorelejéről(Sor,Elem): (Sor Elem) {NemDef} Sorvégéről(Sor,Elem): (Sor Elem) {NemDef} üres?(sor): Logikai első(sor): Elem {NemDef} 40/42

Kétvégű sor A műveletek specifikációja Üres(S): ef:, uf: S=() üres?(s): ef:, uf: üres?=s=() Sorelejére(S,e): ef: S=W, uf: S=(e,W) Sorvégére(S,e): ef: S=W, uf: S=(W,e) Sorelejéről(S,e): ef: S=(f,W), uf: S=W és e=f Sorvégéről(S,e): ef: S=(W,f), uf: S=W és e=f első(s): ef: S=(f,W), uf: első=f 41/42

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